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


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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM