FileUtils

齊大聖2012發表於2019-03-04

一、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);
}