FileUtils
一、Maven依賴
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
二、常用API
1、寫檔案
public static void main(String[] args) throws IOException {
// 1、 向一個檔案寫入一段文字
FileUtils.write(new File("D:/a/1.txt"), "檔案內容", "UTF-8", true);
// 2、以追加的方式寫入
FileUtils.writeStringToFile(new File("D:/a/1.txt"), "author:apple", "UTF-8", true);
//3、寫入多行
List<String> list= new ArrayList<String>();
list.add("第一行");
list.add("第二行");
FileUtils.writeLines(new File("D:/a/1.txt"), list, true);
}
2、讀檔案
public static void main(String[] args) throws IOException {
//讀檔案
System.out.println(FileUtils.readFileToString(new File("D:/a/1.txt"), "UTF-8"));
System.out.println(FileUtils.readLines(new File("D:/a/1.txt"), "UTF-8")); //返回一個list
}
3、刪除檔案/資料夾
public static void main(String[] args) throws IOException {
// 刪除資料夾
FileUtils.deleteDirectory(new File("D:/a"));
// 資料夾不是空任然可以被刪除,永遠不會丟擲異常
FileUtils.deleteQuietly(new File("D:/a"));
}
4、複製檔案
public static void main(String[] args) throws IOException {
//結果是a和a1在同一目錄
FileUtils.copyDirectory(new File("D:/a"), new File("D:/a1"));
//結果是將a拷貝到a2下
FileUtils.copyDirectoryToDirectory(new File("D:/a"), new File("D:/a2"));
//拷貝檔案
FileUtils.copyFile(new File("d:/1.xml"), new File("d:/1.xml.bak"));
//拷貝檔案到目錄中
FileUtils.copyFileToDirectory(new File("d:/1.xml"), new File("d:/a"));
//拷貝url到檔案
FileUtils.copyURLToFile(new URL("http://www.a.com/1.xml"), new File("d:/1.xml"));
}
5、移動檔案
public static void main(String[] args) throws IOException {
//移動檔案 或 資料夾
//static void:moveDirectory(File srcDir, File destDir)
FileUtils.moveDirectory(new File("D:/a1"), new File("D:/a2")); //注意這裡 第二個引數檔案不存在會引發異常
//static void:moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)
FileUtils.moveDirectoryToDirectory(new File("D:/a2"), new File("D:/a3"), true);
/* 上面兩個方法的不同是:
* moveDirectory:D:/a2裡的內容是D:/a1的內容。
* moveDirectoryToDirectory:D:/a2資料夾移動到到D:/a3裡
*
* 下面的3個都比較簡單沒提供示例,只提供了api
* 其中moveToDirectory和其他的區別是 它能自動識別操作檔案還是資料夾
*/
static void:moveFileToDirectory(srcFile, destDir, createDestDir)
static void:moveFile(File srcFile, File destFile)
static void:moveToDirectory(File src, File destDir, boolean createDestDir)
}
6、實現快速下載檔案
public static void main(String[] args) throws IOException {
//下載方式1
URL url = new URL("http://www.baidu.com/img/baidu_logo.gif");
File file = new File("/Users/jjs/Desktop/baidu1.gif");
FileUtils.copyURLToFile(url, file);
//下載方式2
InputStream in = new URL("http://www.baidu.com/img/baidu_logo.gif").openStream();
byte[] gif = IOUtils.toByteArray(in);
FileUtils.writeByteArrayToFile(new File("D:/baidu2.gif"), gif);
IOUtils.closeQuietly(in);
//下載方式3
InputStream in3 = new URL("http://www.baidu.com/img/baidu_logo.gif").openStream();
byte[] gif3 = IOUtils.toByteArray(in3);
IOUtils.write(gif3, new FileOutputStream(new File("D:/baidu3.gif")));
IOUtils.closeQuietly(in3);
}
7、實現快速複製
public static void main(String[] args) throws IOException {
//複製方式1
FileUtils.copyFile(new File(D:/abc.txt"), new File(D:/abc_bak.txt"));
//複製方式2
Writer write = new FileWriter("D:/abc_bak.txt");
InputStream ins = new FileInputStream(new File("D:/abc.txt"));
IOUtils.copy(ins, write);
write.close();
IOUtils.closeQuietly(ins);
//將內容同時寫入兩個不同的檔案,就當是一種另類的複製吧
File test1 = new File("D:/split1.txt");
File test2 = new File("D:p/split2.txt");
OutputStream outStream = null;
try {
FileOutputStream fos1 = new FileOutputStream(test1);
FileOutputStream fos2 = new FileOutputStream(test2);
//包含不同的文字
outStream = new TeeOutputStream(fos1, fos2);
outStream.write("One Two Three, Test".getBytes());
outStream.flush();
} catch (IOException ioe) {
System.out.println("Error writing to split output stream");
} finally {
IOUtils.closeQuietly(outStream);
}
}
8、獲取網頁的內容
public static void main(String[] args) throws IOException {
URL webUrl = new URL("https://wenku.baidu.com/view/7999faba960590c69ec376be.html?from=search");
InputStream ins = webUrl.openStream();
String contents = IOUtils.toString(ins, "gb2312");
System.out.println("contents: " + contents);
}