组件与框架的关系
java代码编译为class文件,多个class文件打包成jar包,多个jar包放到一起是组件,在组件上加入自己的代码是框架
组件:可以选择——主动
框架:用的是思想——被动
CommonsIO
该组件是"apache.org"——阿帕奇中的一员,是IO的工具集
在编译器中需要拷贝:
commons-io-2.6.jar
commons-io-2.6-sources.jar
具体压缩包请去官网下载CommonsIO官网快速进入
FileUtils
统计文件和目录大小
package com.mm.ax;
import java.io.File;
import org.apache.commons.io.FileUtils;
public class test1 {
public static void main(String[] args) {
//文件大小
long len =FileUtils.sizeOf(new File("src\\com\\mm\\ax\\test1.java"));
System.out.println(len);
//目录大小
len = FileUtils.sizeOf(new File("D:\\EclipsePlace\\CommonIO"));
System.out.println(len);
}
}
其中的FileUtils.sizeOf的源码如下:
public static long sizeOf(final File file) {
if (!file.exists()) {
final String message = file + " does not exist";
throw new IllegalArgumentException(message);
}
if (file.isDirectory()) {
return sizeOfDirectory0(file); // private method; expects directory
} else {
return file.length();
}
}
如果是目录:(用的是递归)
private static long sizeOfDirectory0(final File directory) {
final File[] files = directory.listFiles();
if (files == null) { // null if security restricted
return 0L;
}
long size = 0;
for (final File file : files) {
try {
if (!isSymlink(file)) {
size += sizeOf0(file); // internal method
if (size < 0) {
break;
}
}
} catch (final IOException ioe) {
// Ignore exceptions caught when asking if a File is a symlink.
}
}
return size;
}
列出子孙级文件
package com.mm.ax;
import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.SuffixFileFilter;
/**
* 列出子孙级
*/
public class test2 {
public static void main(String[] args) {
//目录,过滤后缀,文件夹的目录
Collection<File> files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
EmptyFileFilter.NOT_EMPTY, null);//内容非空:EmptyFileFilter.NOT_EMPTY
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
System.out.println("---------------------");
files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
//子孙级:DirectoryFileFilter
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
System.out.println("---------------------");
files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
new SuffixFileFilter("java"), DirectoryFileFilter.INSTANCE);
//文件后缀是.java
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
System.out.println("---------------------");
files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
FileFilterUtils.or(new SuffixFileFilter("java"),
new SuffixFileFilter("class"),EmptyFileFilter.EMPTY), DirectoryFileFilter.INSTANCE);
//既要.java又要.class
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
System.out.println("---------------------");
files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
FileFilterUtils.and(new SuffixFileFilter("java"),
EmptyFileFilter.NOT_EMPTY), DirectoryFileFilter.INSTANCE);
//不为空且为java文件
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
读取文件内容
package com.mm.ax;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
/**
* 读取内容
*/
public class test3 {
public static void main(String[] args) throws IOException {
//读取文件
String msg =FileUtils.readFileToString(new File("dest.txt"),"UTF-8");
System.out.println(msg);
//用字节数组读取
byte[] datas = FileUtils.readFileToByteArray(new File("dest.txt"));
System.out.println(datas.length);
//逐行读取——每行放入容器中
List<String> msgs= FileUtils.readLines(new File("dest.txt"),"UTF-8");
for (String string : msgs) {
System.out.println(string);
}
//类似于迭代器
LineIterator it =FileUtils.lineIterator(new File("dest.txt"),"UTF-8");
while(it.hasNext()) {
System.out.println(it.nextLine());
}
}
}
写出文件内容
package com.mm.ax;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
/**
* 写出内容
*/
public class test4 {
public static void main(String[] args) throws IOException {
//写出文件——从头开始写出
FileUtils.write(new File("study.txt"), "建立了新文件\n","GBK");
//追加内容
FileUtils.writeStringToFile(new File("study.txt"), "建立了新文件\n","GBK",true);
//字节数组——追加内容
FileUtils.writeByteArrayToFile(new File("study.txt"),
"建立了新文件\n".getBytes("GBK"),true);
//写出列表
List<String> datas =new ArrayList<String>();
datas.add("代红1");
datas.add("代红2");
datas.add("代红3");
FileUtils.writeLines(new File("study.txt"), datas,"————————",true);
//第二个参数是列表,第三个参数是条目之间的连接符
}
}
拷贝文件
package com.mm.ax;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
/**
* 拷贝
*/
public class test5 {
public static void main(String[] args) throws IOException {
//复制文件
FileUtils.copyFile(new File("内存泄漏.JPG"),new File("copy.JPG"));
//复制文件到目录
FileUtils.copyFileToDirectory(new File("内存泄漏.JPG"),new File("lib"));
//复制目录到目录——第一个参数作为第二个参数的子目录
FileUtils.copyDirectoryToDirectory(new File("lib"),new File("libs"));
//复制目录
FileUtils.copyDirectory(new File("lib"),new File("libs"));
//拷贝URL内容——第一个参数是图片的路径,第二个参数是取一个名字
String url ="https://ps.ssl.qhimg.com/sdmt/270_162_100
/t0187f7f6d0515b56ae.webp";
FileUtils.copyURLToFile(new URL(url), new File("picture.jpg"));
//读取字符串的内容——需要指定字符集
String datas =IOUtils.toString(new URL("http://www.baidu.com"), "UTF-8");
System.out.println(datas);
}
}