1. 程式人生 > >使用IO流復制文件夾(包括子目錄)

使用IO流復制文件夾(包括子目錄)

main 讀取數據 硬盤 copy eno 調用 輸入 就是 ioe

IO流用於處理設備上的數據(包括硬盤,內存,鍵盤錄入)。

IO流可根據流向不同分為輸入流和輸出流,根據處理數據類型不同分為字節流和字符流。

字符流的由來: 因為數據編碼的不同,而有了對字符進行高效操作的流對象。本質其實就是基於字節流讀取時,去查了指定的碼表。

字節流和字符流的區別:

a.讀寫單位不同:字節流以字節(8bit)為單位,字符流以字符為單位,根據碼表映射字符,一次可能讀多個字節。

b.處理對象不同:字節流能處理所有類型的數據(如圖片、avi等),而字符流只能處理字符類型的數據。

結論:只要是處理純文本數據,就優先考慮使用字符流。 除此之外都使用字節流。

技術分享圖片技術分享圖片技術分享圖片技術分享圖片

使用IO流復制文件夾(包括子目錄)思路和步驟: 對於文件夾的復制,分2種情況

(1)當我們對文件進行遍歷的時候,如果目標文件夾下的文件是個標準文件的話,我們就可以直接去做復制的動作,

(2)當目標文件中,是帶有文件夾的文件,那麽這個時候就需要對文件夾進行遞歸,直到最後它是個標準文件後,我們在做復制動作

代碼演示:

 1 package liu;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
8 9 public class CopyDirectory { 10 /** 11 * 復制文件的方法 12 * @param src:源文件 13 * @param dest:目標文件 14 */ 15 public static void copyFile(File src,File dest) { 16 try { 17 //實例化文件輸入流和文件輸出流對象 18 FileInputStream fis = new FileInputStream(src); 19 FileOutputStream fos = new
FileOutputStream(dest); 20 //定義接收源文件數組 21 byte[] buf = new byte[(int) src.length()]; 22 //從源數據中讀取數據 23 fis.read(buf); 24 //把數據寫入到目標文件中 25 fos.write(buf); 26 //關閉流 27 fos.close(); 28 fis.close(); 29 } catch (FileNotFoundException e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } catch (IOException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 } 37 /** 38 * 復制目錄的方法 39 * @param src 40 * @param dest 41 */ 42 public static void copyDir(File src,File dest) { 43 dest.mkdir(); 44 File[] files = src.listFiles(); 45 for (File file : files) { 46 if(file.isFile()) { 47 copyFile(file, new File(dest.getAbsolutePath()+File.separator+file.getName())); 48 } 49 if(file.isDirectory()) { 50 copyDir(file, new File(dest.getAbsolutePath()+File.separator+file.getName())); 51 } 52 } 53 } 54 public static void main(String[] args) { 55 //創建文件對象和指定的文件相關聯 56 File src = new File("D:\\HBuilder_7.5"); 57 File dest = new File("E:\\"+src.getName()); 58 //創建目錄 59 dest.mkdir(); 60 //找到源目錄下所有文件 61 File[] fs = src.listFiles(); 62 //遍歷 63 for (File f : fs) { 64 //如果是文件調用復制文件的方法 65 if(f.isFile()) { 66 copyFile(f, new File(dest.getAbsolutePath()+File.separator+f.getName())); 67 } 68 //如果是目錄調用復制目錄的方法 69 if(f.isDirectory()) { 70 copyDir(f, new File(dest.getAbsolutePath()+File.separator+f.getName())); 71 } 72 } 73 } 74 }

使用IO流復制文件夾(包括子目錄)