這邊介紹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 block e.printStackTrace(); } finally{ try { bf.close(); bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.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); } } } } }
自己感覺還是用迭代比較好,效率也搞點吧