java進階(34)--File類、目錄複製

Mrwhite86發表於2021-01-27

一、File類的理解

1、File類不能完成檔案的讀與寫。

2、FIle類代表:檔案或目錄的路徑名的抽象表示形式。

 

二、FIle類常用方法:

1、建立一個FIle物件:File()

File f1=new File("D:\\javaTest\\fileTest02");

2、判斷File物件是否存在:exists()

System.out.println(f1.exists());

3、新建檔案:createNewFile()

f1.createNewFile();

4、新建資料夾:mkdir()

f1.mkdir();

5、建立多重目錄:mkdirs()

        File f2=new File("D:\\javaTest\\a\\b\\c");
        if(!f2.exists()){
            f2.mkdirs();
        }

6、獲取父級目錄:getParent()

        File f2=new File("D:\\javaTest\\a\\b\\c");
        if(!f2.exists()){
            f2.mkdirs();
        }
        String parentPath=f2.getParent();
        System.out.println(parentPath);

執行結果:D:\javaTest\a\b

7、獲取絕對路徑目錄:getAbsolutePath()

        File f3=new File("hello\\test01");
        System.out.println(f3.getParent());
        System.out.println(f3.getAbsolutePath());

檢視執行結果:

hello
C:\Users\Mr.White\IdeaProjects\javaAdvance\hello\test01

8、獲取名稱:getName()

9、獲取絕對檔名:getAbsoluteFile()

        File f4=new File("abc");
        System.out.println(f3.getName());
        System.out.println(f3.getAbsoluteFile());

檢視執行結果:

test01
C:\Users\Mr.White\IdeaProjects\javaAdvance\hello\test01

10、判斷路徑是否是一個檔案:isFile()

11、判斷路徑是否是一個目錄:isDirectory()

        File f1=new File("D:\\javaTest\\test01.txt");
        f1.createNewFile();
        System.out.println(f1.isFile());
        System.out.println(f1.isDirectory());

檢視執行結果:

true
false

12、獲取最後一次修改時間,結果為13位時間戳:lastModified()

System.out.println(f1.lastModified());

13、獲取檔案的大小,單位位元組:length()

System.out.println(f1.length());

14、獲取當前目錄下所有子檔案,返回FIle陣列:listFiles()

        File f=new File("D:\\javaTest");
        File[] files=f.listFiles();
        for(File file:files){
            System.out.println(file.getAbsolutePath());
        }

 

三、目錄拷貝,將C:\\test01目錄下內容拷貝至D:\\test01目錄下

 使用FIle類,流集合遞迴完成。

 1 package JAVAADVANCE;
 2 import java.io.*;
 3 import java.lang.reflect.Field;
 4 public class TestAdvance34FileTest03Copy {
 5     public static void main(String[] args) throws IOException {
 6         //拷貝源.
 7         File srcFile = new File( "c:\\test01");
 8         //拷貝目標
 9         File destFile = new File( "D:\\");
10         //呼叫方法拷貝
11         copyDir(srcFile, destFile);
12         }
13     private static void copyDir(File srcFile, File destFile) {
14         if(srcFile.isFile()) {
15             // srcFile如果是一個檔案的話,遞迴結束。
16             //是檔案的時候需要拷貝
17             //...一邊讀一邊寫
18             FileInputStream in=null;
19             FileOutputStream out=null;
20             try {
21                 //讀這個檔案
22                 in=new FileInputStream(srcFile);
23                 //寫到這個檔案中
24                 String path=(destFile.getAbsolutePath().endsWith("\\")  ? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\\")+srcFile.getAbsolutePath().substring(3);
25                 out=new FileOutputStream(path);
26                 //一邊讀一邊寫
27                 byte[] bytes=new byte[1024*1024];//一次複製1MB
28                 int readCount=0;
29                 while ((readCount=in.read(bytes))!=-1){
30                     out.write(bytes,0,readCount);
31                 }
32 
33             } catch (FileNotFoundException e) {
34                 e.printStackTrace();
35             } catch (IOException e) {
36                 e.printStackTrace();
37             } finally {
38                 if (out!=null){
39                     try {
40                         out.close();
41                     } catch (IOException e) {
42                         e.printStackTrace();
43                     }
44                     if (in !=null){
45                         try {
46                             in.close();
47                         } catch (IOException e) {
48                             e.printStackTrace();
49                         }
50                     }
51                 }
52 
53             }
54             return;
55         }
56         //獲取源下面的子目錄
57         File[] files = srcFile.listFiles();
58         for(File file : files){
59             // 獲取所有檔案的(包括目錄和檔案)絕對路徑
60             //System.out.println(file.getAbsolutePath());
61             if(file.isDirectory()){
62                 //新建對應的目錄
63                 //System.out.println(file.getAbsolutePath());
64                 String srcDir=file.getAbsolutePath();//獲取源目錄
65                 //System.out.println(srcDir.substring(3));
66                 String destDir=(destFile.getAbsolutePath().endsWith("\\")  ? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\\")+srcDir.substring(3);
67                 //System.out.println(destDir);
68                 File newFile=new File(destDir);
69                 if(!newFile.exists()){
70                     newFile.mkdirs();
71                 }
72             }
73             //遞迴呼叫
74             copyDir(file, destFile);
75         }
76     }
77 }

 

相關文章