总是有人要赢的,而为什么不是你,所以我们必须要努力
Commons IO是针对开发IO流功能的工具类库。 主要包括六个区域:
该工具类可能是平时使用得最多的工具类了。 IOUtils包含处理读、写和复制的工具方法。方法对InputStream、OutputStream、Reader和Writer起作用。
例如,从一个URL读取字节的任务,并且打印它们:
public static void main(String[] args) throws Exception {
//从网络上读取一个网页资源
InputStream in = new URL("http://commons.apache.org").openStream();
try {
InputStreamReader inR = new InputStreamReader(in);
BufferedReader buf = new BufferedReader(inR);
String line;
while ((line = buf.readLine()) != null) {
System.out.println(line);
}
} finally {
if (in != null) {
in.close();
}
}
}
结果:
控制台打印出了这个网页的所有内容
使用IOUtils:
public static void main(String[] args) throws Exception {
//从网络上读取一个网页资源
try (InputStream in = new URL("http://commons.apache.org").openStream()) {
System.out.println(IOUtils.toString(in, StandardCharsets.UTF_8));
}
//finally {
// IOUtils.closeQuietly(in);
//}
}
在某些应用领域,这些IO操作是常见的,而这个类可以节省大量的时间。你可以依靠经过良好测试的代码。这样的实用程序代码,灵活性和速度是最重要的。
使用上述技术读取一个1 gb文件将导致试图创建一个1 gb的字符串对象! 因此你的流里问价非常非常的打,建议不要这么做,分布处理吧
主要方式介绍:
public static void main(String[] args) throws Exception {
try (InputStream in1 = new URL("http://commons.apache.org").openStream(); InputStream in2 = new URL("http://commons.apache.org").openStream()) {
System.out.println(in1.equals(in2)); //false
System.out.println(IOUtils.contentEquals(in1, in2)); //true
}
}
备注:contentEqualsIgnoreEOL(final Reader input1, final Reader input2) 该方法会忽略ignoring EOL characters
copy(final InputStream input, final OutputStream output, final int bufferSize)
,Reader拷贝到Writer等等lineIterator(final InputStream input, final Charset encoding) lineIterator(final InputStream input, final String encoding) lineIterator(final Reader reader)
public static void main(String[] args) throws Exception {
try (InputStream in1 = new URL("http://commons.apache.org").openStream()) {
LineIterator lineIterator = IOUtils.lineIterator(in1, StandardCharsets.UTF_8);
while (lineIterator.hasNext()) {
lineIterator.nextLine();
}
lineIterator.close();
}
}
各种常用的常量:
public static final char DIR_SEPARATOR_UNIX = '/';
public static final char DIR_SEPARATOR_WINDOWS = '\\';
/**
* The system directory separator character. 系统文件夹的分隔符 通用的
*/
public static final char DIR_SEPARATOR = File.separatorChar;
/**
* The Unix line separator string. 换行符
*/
public static final String LINE_SEPARATOR_UNIX = "\n";
//winows换行符
public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
/**
* The system line separator string. 通用的换行符
*/
public static final String LINE_SEPARATOR;
一般可以认为是"/“的作用等同于”\" 在java中路径一般用"/",在java中路径一般用"/",linux、unix中的路径一般用"/",所以在java中写windows路径一般用"/“或将”“转义一下,就成了”\",最好用“/”,因为java是跨平台的。
“\”(在java代码里应该是\)是windows环境下的路径分隔符,Linux和Unix下都是用“/” 而在windows下也能识别“/”。所以最好用“/”
为了提高代码的跨平台可移植性对于文件路径分隔符也可以使用File.separator表示文件路径分隔符
new File("test"+File.separator+"test.txt"); //中file的相对路径就是test下的test.txt
FileUtils类包含使用File对象的工具方法。包括读写、复制和比较等等。
public static void main(String[] args) throws IOException {
File file = new File("/application.properties");
List<String> lines = FileUtils.readLines(file, "UTF-8");
System.out.println(lines);
}
public static void main(String[] args) throws Exception {
try (InputStream in1 = new URL("http://commons.apache.org").openStream()) {
String s = FileUtils.byteCountToDisplaySize(IOUtils.toByteArray(in1).length);
System.out.println(s); //26 KB
}
}
long csum = FileUtils.checksum(file, new CRC32()).getValue();
,一般下载来一个文件后,为了安全可以校验一把FilenameUtils类包含工具方法不需要使用File对象就可以操作文件名。该类致力于屏蔽Unix和Windows之间的不同,避免这些环境之间的转换(例如,从开发到生产)。 开发在windows、生产在Linux
一般使用较少,这里不做过多介绍.
提供灵活的方式使用一个基于行的文件。可以直接,或通过FileUtils或IOUtils的工厂方法创建实例。推荐使用模式:
备注:也是需要close的
此包自带一些常用的Filter如:AgeFileFilter、CanReadFileFilter、CanWriteFileFilter、DirectoryFileFilter、EmptyFileFilter、HiddenFileFilter等等。基本能满足我们所有需求
如:SizeFileComparator、ReverseComparator、LastModifiedFileComparator、ExtensionFileComparator等等