第6次文章:利用IO流,對文件和文件夾進行拷貝操作

  • 2019 年 10 月 8 日
  • 筆記

最近兩周在家,學習效率大打折扣,所以這兩周的學習總結不是那麼豐富,有點簡單,希望各位小夥伴兒多多包涵啊

下周就回學校了,一切都會恢復過來的,大家一起加油哦
利用上周學習到的IO流的讀取和寫出操作,進一步可以將讀取和寫出進行聯合使用,實現對文件以及文件夾的拷貝操作。

對文件的複製操作主要分四步進行:

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方法進行建立相應的文件夾路徑。