1. 程式人生 > >關於檔案屬性(Java)

關於檔案屬性(Java)

1、編寫一個程式,指定一個資料夾,能自動計算出其總容量

import java.io.File;
import java.util.ArrayList;

public class FileAction {
    ArrayList<File> fileList;
    File root;

    public FileAction(String pathName) {
        root = new File(pathName);
        fileList = new ArrayList<>();
    }

    public void
searchFiles() { File[] files = root.listFiles(); int length = files.length; for (int i = 0; i < length; i++) { if (files[i].isDirectory()) { root = files[i]; searchFiles(); } else { fileList.add(files[i]); } } }
public void countFiles() { long totalSize = 0; System.out.println("檔案數:" + fileList.size()); for (int i = 0; i < fileList.size(); i++) { totalSize += fileList.get(i).length(); } System.out.println("檔案總大小:" + totalSize); } public static void
main(String[] args) { String pathName = "E:\\音樂"; FileAction counter = new FileAction(pathName); counter.searchFiles(); counter.countFiles(); } }

2、編寫一個檔案加解密程式,通過命令列完成加解密工作

package file_attribute_analysis;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileAction {
    private static final int numOfEncAndDec=0x99;//加密解密金鑰
    private static int dataOfFile=0;//檔案位元組內容

    public static void main(String[] args) {
    File srcFile=new File("G:\\encryption_text.txt");//初始化檔案
    File encFile=new File("G:\\encryption_text01.txt"); //加密檔案
    File decFile=new File("G:\\encryption_text02.txt");  //解密檔案
  
    try {
        EncFile(srcFile,encFile);  //加密操作
        DecFile(encFile,decFile);
    }catch(Exception e) {
        e.printStackTrace();
    }
}
    private static void EncFile(File srcFile,File encFile)throws Exception{
        if(!srcFile.exists()) {
            System.out.println("source file not exixt");
        }
        if(!encFile.exists()) {
            System.out.println("encrypt file created");
            encFile.createNewFile();//若無加密檔案,新建一個加密檔案
        }
        InputStream fis=new FileInputStream(srcFile);
        OutputStream fos=new FileOutputStream(encFile);
  
        while((dataOfFile=fis.read())>-1) {//當讀到檔案內容時
            fos.write(dataOfFile^numOfEncAndDec);//將讀出的內容加密後寫入
        }
        fis.close();
        fos.flush();
        fos.close();
    }
    private static void DecFile(File encFile,File decFile)throws Exception{
        if(!encFile.exists()) {
            System.out.println("encrypt file not exixt");
        }
        if(!decFile.exists()) {
            System.out.println("decrypt file created");
            decFile.createNewFile();
        }
        InputStream fis=new FileInputStream(encFile);
        OutputStream fos=new FileOutputStream(decFile);
  
        while((dataOfFile=fis.read())>-1) {
            fos.write(dataOfFile^numOfEncAndDec);
        }
        fis.close();
        fos.flush();
        fos.close();
    }
}

加密前:

加密後;

解密後:

3、編寫一個檔案分割工具,能把一個大檔案分割成多個小的檔案。並且能再次把它們合併起來得到完整的檔案

1.分割檔案:

複製程式碼
 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 
 7 
 8 public class CutFile {
 9     public static void main(String[] args) {
10         //呼叫cutFile()函式 傳人蔘數分別為 (原大檔案,切割後存放的小檔案的路徑,切割規定的記憶體大小)
11         cutFile("D:\\file\\file.txt", "D:\\file2",1024 * 1024 * 20);
12     }
13 
14     private static void cutFile(String src, String endsrc, int num) {
15         FileInputStream fis = null;
16         File file = null;
17         try {
18             fis = new FileInputStream(src);
19             file = new File(src);
20             //建立規定大小的byte陣列
21             byte[] b = new byte[num];
22             int len = 0;
23             //name為以後的小檔案命名做準備
24             int name = 1;
25             //遍歷將大檔案讀入byte陣列中,當byte陣列讀滿後寫入對應的小檔案中
26             while ((len = fis.read(b)) != -1) {
27                 //分別找到原大檔案的檔名和檔案型別,為下面的小檔案命名做準備
28                 String name2 = file.getName();
29                 int lastIndexOf = name2.lastIndexOf(".");
30                 String substring = name2.substring(0, lastIndexOf);
31                 String substring2 = name2.substring(lastIndexOf, name2.length());
32                 FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
33                 //將byte陣列寫入對應的小檔案中
34                 fos.write(b, 0, len);
35                 //結束資源
36                 fos.close();
37                 name++;
38             }
39         } catch (FileNotFoundException e) {
40             e.printStackTrace();
41         } catch (IOException e) {
42             e.printStackTrace();
43         } finally {
44             try {
45                 if (fis != null) {
46                     //結束資源
47                     fis.close();
48                 }
49             } catch (IOException e) {
50                 e.printStackTrace();
51             }
52         }
53     }
54 }
複製程式碼

實現結果截圖:

未操作前:

分割後:

檔案的集合:

複製程式碼
 1 package class6;
 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 GotherFile {
10     public static void main(String[] args){
11         //呼叫togetherFile()函式合併小檔案到大檔案   引數列表分別為 (小檔案所在的父資料夾路徑,所合成的大檔案的路徑)
12         togetherFile("D:\\file2","D:\\file3\\file.txt");
13     }
14     private static void togetherFile(String src, String endsrc){
15         FileOutputStream fos = null;
16         File file1 = null;
17         File file2 = null;
18         try {
19             file1 = new File(endsrc);
20             file2 = new File(src);
21             //獲得大檔案的儲存路徑的FileOutputStream物件
22             fos = new FileOutputStream(endsrc);
23             //迴圈遍歷對應資料夾中的所有小檔案
24             for(File file : file2.listFiles()){
25 
26                 FileInputStream fis = new FileInputStream(file.getAbsolutePath());
27 
28                 byte[] b = new byte[1024*1024];
29                 int len = 0;
30                 //將小檔案讀入byte陣列,之後再將byte陣列寫入大檔案中
31                 while((len = fis.read(b)) != -1){
32                     fos.write(b, 0, len);
33                 }
34                 //結束資源
35                 fis.close();
36             }
37         } catch (FileNotFoundException e) {
38             e.printStackTrace();
39         } catch (IOException e) {
40             e.printStackTrace();
41         }finally{
42             try {
43                 if(fos != null){
44                     //結束資源
45                     fos.close();
46                 }
47             } catch (IOException e) {
48                 e.printStackTrace();
49             }
50         }
51     }
52 }
複製程式碼

操作前:

集合操作後: