深度拷貝指定擴展名文件

------- <a  target="blank">android培訓</a>、<a  target="blank">java培訓</a>、期待與您交流! ----------

package test;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;


public class Test3 {
/**
* 要求:將一個目錄下的所有指定文件拷貝至指定目錄。

* 說明:二次修改內容
* 去掉了文件過濾對象,直接判斷獲取的文件名是否以指定格式結尾,是的話就加入集合中
* 這樣好像不是面對對象的思想,有悖編程的思想,但是代碼簡單多了,重要的是代碼的閱讀性真的提高了很多。

*/
public static void main(String[] args) throws IOException {

//定義一個arraylist集合,我要用它裝file對象
ArrayList<File> al = new ArrayList<File>();
//將目錄路徑封裝成對象
File dir = new File("e:\\java");
//深度遍歷目錄,用遞歸來搞,並將遍歷出來的文件對象添加到al集合中
al = listDir(dir, al);
//拷貝集合中的文件到指定目錄中去
copyFile(al, "e:\\jad");
}
/**
* 拷貝文件的函數:傳給我一個集合(裏面裝的要是file對象),在給我一個目錄,我將把集合中的所有文件拷貝到目的地器
*/
public static void copyFile(ArrayList<File> al, String destDir)
throws IOException {
//字符串緩衝區,將讀到的每一行內容存儲到line中
String line;
//遍歷集合中的每一個對象,每一個對象就代表一個文件,讀取它的內容
for (int i = 0; i < al.size(); i++) {
File file = (File) al.get(i);//將取出的對象賦給file引用
BufferedReader bufr = new BufferedReader(new FileReader(file));
BufferedWriter bufw = new BufferedWriter(new FileWriter("e:\\jad\\"
+ file.getName()));
//狂讀和狂寫
while ((line = bufr.readLine()) != null) {
bufw.write(line);
bufw.newLine();//換行,不換行就寫到一行去了,會改變文本的排版格式
}
//關閉流資源
bufr.close();
bufw.close();
}
}
/**
* 遍歷目錄函數:給哥一個目錄,把你深度遍歷,獲取所有文件,並通過文件名過濾器獲取想要的文件,裝到一個al集合中,返回給你
*/
public static ArrayList<File> listDir(File dir, ArrayList<File> al) {
File[] files = dir.listFiles();

for (File file : files) {
//System.out.println(file.getAbsolutePath());
if (file.isDirectory())
al = listDir(file, al);
else
{
//判斷文件名是否以指定格式結尾,是的話就存儲到集合中去
if(file.getName().endsWith("java"))
al.add(file);
//System.out.println(file.getAbsolutePath());
}
}
return al;
}

}



------- <a  target="blank">android培訓</a>、<a  target="blank">java培訓</a>、期待與您交流! ----------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章