關於檔案屬性(Java)
阿新 • • 發佈:2018-11-19
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 voidsearchFiles() { 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 voidmain(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 }
操作前:
集合操作後: