遍歷文件夾and拷貝文件內容
這邊介紹2中方式,對文件夾進行操作,并且copy文件
?
第一種普通方式遍歷文件夾(里面有些null沒做)
?
package com.fih.thh;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.LinkedList;/** *把D盤跟目錄下面的tools下面的以.txt結尾(包括子文件夾)文件拷貝到Z盤 */public class TestCopy {static String path = "D:\\tools";public static void main(String[] args) {LinkedList<File> list =new LinkedList<File>();File file = new File(path);if(file != null && file.isDirectory()){File[] files = file.listFiles();for(File f : files){if(f.isDirectory()){list.add(f);}else{new TestCopy().pass(f);}}while(!list.isEmpty()){File f = list.removeFirst();for(File ff : f.listFiles()){if(ff.isDirectory()){list.add(ff);}else{new TestCopy().pass(ff);}}}}}public void pass(File f){System.out.println("++++++++++++" + f.getAbsolutePath());if(f.getName().split("\\.")[1].equals("txt")){BufferedReader bf = null;BufferedWriter bw = null;try {File ff = new File("Z:\" + f.getName());if(!ff.exists()){ff.createNewFile();}bf = new BufferedReader(new FileReader(f.getAbsolutePath()));bw = new BufferedWriter(new FileWriter("Z:\" + ff.getName()));String line;while((line = bf.readLine())!= null){String lineNew = line.split("\\.")[1];bw.write(lineNew);bw.newLine();}//傳送完要flush,不然不會拷貝東西過去,或者close時也有flush功能bw.flush();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {bf.close();bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}}}?第二種迭代方式
package com.fih.thh;import java.io.File;/**?*把D盤跟目錄下面的tools下面的以.txt結尾(包括子文件夾)文件拷貝到Z盤 */public class TestCopy2 {public static void main(String[] args) {File file = new File("D:\\tools");pass(file);}public static void pass(File file){if(file != null && file.isDirectory()){File[] files = file.listFiles();for(File f : files){if(f.isDirectory()){pass(f);}else{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //調用了TestCopy中的類new TestCopy().pass(f);}}}}}?自己感覺還是用迭代比較好,效率也搞點吧
?