在java中對文件夾的拷貝和刪除

在java中對文件與文件目錄的操作主要集中在java.io包,但是對於文件夾的操作還沒有可用的直接處理方法。
對文件的操作最好的辦法就是遞歸,很多人一聽遞歸就放棄了,其實遞歸是很簡單的,我先從遞歸設計的基本思想入手:
遞歸算法設計的基本思想是:對於一個複雜的問題,把原問題分解爲若干個相對簡單類同的子問題,繼續下去直到子問題簡單到能夠直接求解,也就是說到了遞推的 出口,這樣原問題就有遞推得解。
關鍵要抓住的是:
(1)遞歸出口
(2)地推逐步向出口逼近
只要把基本思想和關鍵的抓住,遞歸運算會和我們寫Hello World一樣的簡單。
文件夾刪除操作:
//originalFile源文件夾
public static void referDeleteFile(File originalFile) {
File filelist[] = originalFile.listFiles(); //獲得文件夾的集合操作
for (File file : filelist) { //遍歷
if (file.isDirectory()) { //判斷是否是目錄
referDeleteFile(file); //遞歸
} else {
file.delete(); //當不是目錄時刪除文件
}
}
originalFile.delete(); // 刪除當前目錄
}
文件夾拷貝操作:
//originalDir 源路徑
//aimDir 目標路徑
public static void referCopyFile(String originalDir, String aimDir) {
File originalFile = new File(originalDir); //實例化源文件
File filelist[] = originalFile.listFiles();//獲得文件集合
for (File file : filelist) { //遍歷
if (file.isDirectory()) {//判斷是否是文件夾
new File(aimDir + File.separator + file.getName()).mkdirs();//在目標路徑上創建目錄
referCopyFile(originalDir + File.separator + file.getName(),//遞歸
aimDir + File.separator + file.getName());
} else {
if (file.isFile()) { //判斷文件是否真實存在
BufferedInputStream bis = null;
FileInputStream in = null;
BufferedOutputStream bos = null;
FileOutputStream out = null;
try {
in = new FileInputStream(file);
bis = new BufferedInputStream(in);
out = new FileOutputStream(new File(aimDir
+ File.separator + file.getName()));
bos = new BufferedOutputStream(out);
byte[] b = new byte[1024 * 10];
int len;
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bos.flush();
bos.close();
out.close();
bis.close();
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else {
System.out.println("目標文件不存在");
}
}
}
}
上面的文件夾拷貝根目錄並沒有拷貝過去,有需要的朋友可以先創建一下根目錄。

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 1406
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章