这次带来的是Apache开源组织的CommonsIO集成组件的FileUtils和IOUtils常用操作。
首先应该去Apache CommonsIO下载网址将组件的压缩包下载到本地。
下载完后解压打开文件夹,这两个圈着的jar包便是需要导入到java的JVM里面的
2) 选择Modules点击要添加的项目名,在选择Dependencies,
3)点击添加,添加JAR,然后选择已经本地路径中下载好的jar包。
打开CommonsIO的API文档,一些常用的方法如下
cleanDirectory:清空目录,但不删除目录。 contentEquals:比较两个文件的内容是否相同。 copyDirectory:将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的 文件。 copyFile:将一个文件拷贝到一个新的地址。 copyFileToDirectory:将一个文件拷贝到某个目录下。 copyInputStreamToFile:将一个输入流中的内容拷贝到某个文件。 deleteDirectory:删除目录。 deleteQuietly:删除文件。 listFiles:列出指定目录下的所有文件。 openInputSteam:打开指定文件的输入流。 readFileToString:将文件内容作为字符串返回。 readLines:将文件内容按行返回到一个字符串数组中。 size:返回文件或目录的大小。 write:将字符串内容直接写到文件中。 writeByteArrayToFile:将字节数组内容写到文件中。 writeLines:将容器中的元素的toString方法返回的内容依次写入文件中。 writeStringToFile:将字符串内容写到文件中。
public static void main(String[] args) throws IOException {
long len1 = FileUtils.sizeOf(new File("E:/py/小说/第一章.txt"));//获取文件大小
long len2 = FileUtils.sizeOf(new File("E:/py"));//获取整个文件夹目录的大小
//过滤,空文件不记录,递归进行遍历
Collection<File> files= FileUtils.listFiles(new File("E:/py/小说"), EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
for (File file:files) {//遍历文件夹
System.out.println(file.getAbsolutePath());
}
//只取文件后缀名为class和txt的文件,DirectoryFileFilter.INSTANCE,方法将使用递归的形式来进行文件过滤扫描。
Collection<File> files1= FileUtils.listFiles(new File("E:/py/小说"),
FileFilterUtils.or(new SuffixFileFilter("txt"),new SuffixFileFilter("class")), DirectoryFileFilter.INSTANCE);
}
public static void main(String[] args) throws IOException {
//文件读取
String msg = FileUtils.readFileToString(new File("E:/py/小说/第一章.txt"),"UTF-8");
System.out.println(msg);
byte[] datas = FileUtils.readFileToByteArray(new File("E:/py/小说/第一章.txt"));
//逐行读取
List<String> msgs = FileUtils.readLines(new File("E:/py/小说/第一章.txt"),"UTF-8");
for (String str:msgs){
System.out.println(str);
}
LineIterator it = FileUtils.lineIterator(new File("E:/py/小说/第一章.txt"),"UTF-8");
while(it.hasNext()){
System.out.println(it.nextLine());
}
}
//写出文件
String st="h哈哈";
FileUtils.write(new File("123.txt"),st,"UTF-8",true);//true表示可用追加内容
FileUtils.writeStringToFile(new File("123.txt"),st,"UTF-8",true)//写出字符串
FileUtils.writeByteArrayToFile(new File("123.sxt"), "Himit_ZH真帅\r\n".getBytes("UTF-8"),true);//将一个字节数组写到文件。
//写出一个列表
List<String> datas =new ArrayList<String>();
datas.add("你好");
datas.add("我好");
FileUtils.writeLines(new File("123.sxt"), datas,"#",true);//#为间隔符
//将文件123copy到123副本
FileUtils.copyFile(new File("123.txt"),new File("123副本.txt"));
//将文件123复制到指定文件夹目录
FileUtils.copyFileToDirectory(new File("123.txt"),new File("E:/py"));
//复制目录到目录
FileUtils.copyDirectoryToDirectory(new File("E:/py"),new File("E:/py"));
//拷贝URL对应网页的内容到文件
String url ="http://www.baidu.com";
IOUtils.toString(new URL(url),"UTF-8");
FileUtils.copyURLToFile(new URL(url),new File("123.txt"));
常用的静态变量设置如下
public static final char DIR_SEPARATOR_UNIX = '/';
public static final char DIR_SEPARATOR_WINDOWS = '\\';
public static final char DIR_SEPARATOR;
public static final String LINE_SEPARATOR_UNIX = "\n";
public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
public static final String LINE_SEPARATOR;
static {
DIR_SEPARATOR = File.separatorChar;
StringBuilderWriter buf = new StringBuilderWriter(4);
PrintWriter out = new PrintWriter(buf);
out.println();
LINE_SEPARATOR = buf.toString();
out.close();
}
一些常用的主要方法,具体使用可用去看官方给的API文档
copy 支持多种数据间的拷贝: copy(inputstream,outputstream) copy(inputstream,writer)..... read 从一个流中读取内容 read(inputstream,byte[]) .... readFully 这个方法会读取指定长度的流,如果读取的长度不够,就会抛出异常 readLines 方法可以从流中读取内容,并转换为String的list skip 这个方法用于跳过指定长度的流, skipFully 这个方法类似skip,只是如果忽略的长度大于现有的长度,就会抛出异常 write 这个方法可以把数据写入到输出流中 writeLines 这个方法可以把string的List写入到输出流中 close 关闭URL连接 closeQuietly 忽略nulls和异常,关闭某个流 contentEquals 比较两个流是否相同 contentEqualsIgnoreEOL 比较两个流,忽略换行符 lineIterator 读取流,返回迭代器 toBufferedInputStream 把流的全部内容放在另一个流中 toBufferedReader 返回输入流 toByteArray 返回字节数组 toCharArray 返回字符数组 toInputStream 返回输入流 toString 返回字符串
一个小小的例子对比
//使用JDK的方法
InputStream in = new URL( "https://www.hcode.top" ).openStream();
try {
InputStreamReader inR = new InputStreamReader( in );
BufferedReader buf = new BufferedReader( inR );
String line;
while ( ( line = buf.readLine() ) != null ) {
System.out.println( line );
}
} finally {
in.close();
}
// 使用 IOUtils 的方法
InputStream in = new URL( "https://www.hcode.top" ).openStream();
try {
System.out.println( IOUtils.toString( in ) );
} finally {
IOUtils.closeQuietly(in);
}
List<String> list = IOUtils.readLines(in, "UTF-8");//只要是InputStream流都可以,比如http响应的流
//直接把流读取为String
String content = IOUtils.toString(in,"UTF-8");
//把流转换为byte数组
byte[] bytes = IOUtils.toByteArray(in);
//把数据写入输出流
char [] ch = new char[]{'a','a','b'};
byte [] by = "aaaa".getBytes();
IOUtils.write("abc", outputStream);
IOUtils.write(ch, outputStream);
IOUtils.write(by, outputStream,"UTF-8");
List<String> lines = new ArrayList();
lines.add("Himit_ZH");
lines.add("handsome");
OutputStream os = new FileOutputStream("E:/123.txt");
IOUtils.writeLines(lines,IOUtils.LINE_SEPARATOR,os);
//把字符串转换流
InputStream inputStream = IOUtils.toInputStream("Himit_ZH", "UTF-8");
try {
IOUtils.copy(inputStream, outputStream);
} finally {
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}