第6次文章:利用IO流,對文件和文件夾進行拷貝操作
- 2019 年 10 月 8 日
- 筆記
最近兩周在家,學習效率大打折扣,所以這兩周的學習總結不是那麼豐富,有點簡單,希望各位小夥伴兒多多包涵啊
對文件的複製操作主要分四步進行:
1、與源文件進行關聯
2、選擇讀取和寫出位元組流
3、選擇相應的讀取位元組長度,並且將讀取出來的位元組數組寫出到指定的目標文件中
4、依次關閉寫出資源,以及讀取資源
對文件進行複製拷貝,下面是相應的源碼:
public static void fileCopy(String srcPath,String destPath) { //1、與源文件和目標文件建立聯繫(確保源文件存在)目標文件可以不存在 fileCopy(new File(srcPath),new File(destPath)); } public static void fileCopy(File src,File dest) { //2、選擇相應的流 InputStream is = null;//創建輸入流,提升作用域 OutputStream os = null;//創建輸出流,提升作用域 try { is = new FileInputStream(src); } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("源文件不存在"); } try { os = new FileOutputStream(dest,true);//以追加的方式寫出 }catch (FileNotFoundException e ) { e.printStackTrace(); System.out.println("目標文件關聯失敗"); } //3、操作 byte[] flush = new byte[1024];//定義每次讀取和寫入的大小 int len = 0 ;//定義每次讀取的實際大小 try { while(-1!=(len=is.read(flush))) { os.write(flush, 0, len); } os.flush(); } catch (IOException e) { e.printStackTrace(); System.out.println("文件讀取失敗"); }finally { //4、關閉資源:先關閉最後打開的資源 try { os.flush(); } catch (IOException e) { e.printStackTrace(); System.out.println("關閉目標文件資源失敗"); } try { is.close(); } catch (IOException e) { e.printStackTrace(); System.out.println("關閉源文件資源失敗"); } } }
在對文件的複製操作中,與上一周的內容(單獨進行寫出操作)相比,由於在讀取的時候已經是使用了位元組數組進行讀取,所以在寫出的時候不需要對位元組流進行強制轉化,可以直接將位元組數組寫出到目標文件中。
對文件夾進行拷貝的基本步驟:
1、在拷貝文件夾的時候,首先需要對源文件夾進行類型判斷,是文件還是文件夾
2、在源文件目錄是文件的時候,可以直接調用上述封裝的fileCopy方法進行文件的複製。
3、若源文件是文件夾的時候,應該利用遞歸的方式,檢查子孫級文件,然後將文件夾中的子孫級文件寫出到目標文件夾中。
文件夾拷貝的源碼:
public static void copyDir(String srcPath,String destPath) { File srcDir = new File(srcPath); File destDir = new File(destPath,srcDir.getName()); copyDirDetails(srcDir,destDir); } public static void copyDirDetails(File srcDir,File destDir) { if (srcDir.isFile()) {//src是文件 FileUtil.fileCopy(srcDir, destDir); }else if (srcDir.isDirectory()) {//src是文件夾 //確保目標文件夾的路徑存在 destDir.mkdirs(); //獲取下一級文件 for (File sub:srcDir.listFiles()) { copyDirDetails(sub,new File(destDir,sub.getName())); } } }
在進行文件夾拷貝時,如果判斷出源文件為文件夾類型,那麼首先應該確保目標文件夾存在,所以我們需要先建立目標文件夾的路徑,此處調用的是mkdirs方法,此方法可以直接建立文件的路徑,而不需要逐級建立相關的文件夾,比mkdir方法更加方便快捷。所以此處選擇mkdirs方法進行建立相應的文件夾路徑。