1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      java實現(xiàn)文件拷貝的方法有哪些

      這篇文章給大家分享的是有關java實現(xiàn)文件拷貝的方法有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

      專業(yè)從事成都做網(wǎng)站、成都網(wǎng)站建設,高端網(wǎng)站制作設計,小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術團隊竭力真誠服務,采用H5頁面制作+CSS3前端渲染技術,成都響應式網(wǎng)站建設公司,讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。

      1. 通過字節(jié)流實現(xiàn)文件的拷貝

       /**
         * 通過字節(jié)流實現(xiàn)文件的拷貝
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByStream(String sourcePath,String targetPath){
          //源文件路徑
          File source = new File(sourcePath);
          //目標文件路徑
          File target = new File(targetPath);
      
          //如果源文件不存在則不能拷貝
          if(!source.exists()){
            return;
          }
          //如果目標文件目錄不存在則創(chuàng)建
          if(!target.getParentFile().exists()){
            target.getParentFile().mkdirs();
          }
      
          try {
            //實現(xiàn)文件的拷貝
            InputStream inputStream = new FileInputStream(source);
            OutputStream outputStream = new FileOutputStream(target);
            int temp = 0;
            //每次讀取1024個字節(jié)
            byte[] data = new byte[1024];
            //將每次讀取的數(shù)據(jù)保存到字節(jié)數(shù)組里面,并且返回讀取的個數(shù)
            while ((temp = inputStream.read(data)) != -1){
              //輸出數(shù)組
              outputStream.write(data,0,temp);
            }
      
            inputStream.close();
            outputStream.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }

      2. 通過字符流實現(xiàn)文件拷貝

      使用字符流只能拷貝文本文件

        /**
         * 通過字符流實現(xiàn)文件的拷貝
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByReaderAndWriter(String sourcePath, String targetPath) {
          //源文件路徑
          File source = new File(sourcePath);
          //目標文件路徑
          File target = new File(targetPath);
      
          //如果源文件不存在則不能拷貝
          if (!source.exists()) {
            return;
          }
          //如果目標文件目錄不存在則創(chuàng)建
          if (!target.getParentFile().exists()) {
            target.getParentFile().mkdirs();
          }
      
          FileReader in = null;
          FileWriter out = null;
          try {
            //字符輸入流和字符輸出流
            in = new FileReader(source);
            out = new FileWriter(target);
      
            char[] c = new char[1024];
            int temp = 0;
            //每次讀取1024個字符
            while ((temp = in.read(c)) != -1) {
              //輸出到文件
              out.write(c, 0, temp);
            }
          } catch (IOException e) {
            e.printStackTrace();
          } finally {
            //關閉流
            try {
              if (in != null) {
                in.close();
              }
              if (out != null) {
                out.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      3. 通過字節(jié)緩沖流實現(xiàn)文件拷貝

      /**
         * 通過字節(jié)緩沖流實現(xiàn)文件的拷貝
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByBuffered(String sourcePath, String targetPath){
          //源文件路徑
          File source = new File(sourcePath);
          //目標文件路徑
          File target = new File(targetPath);
      
          //如果源文件不存在則不能拷貝
          if (!source.exists()) {
            return;
          }
          //如果目標文件目錄不存在則創(chuàng)建
          if (!target.getParentFile().exists()) {
            target.getParentFile().mkdirs();
          }
      
          InputStream in = null;
          OutputStream out = null;
          try {
            //字節(jié)緩沖輸入流和字節(jié)緩沖輸出流
            in = new BufferedInputStream(new FileInputStream(source));
            out = new BufferedOutputStream(new FileOutputStream(target));
      
            byte[] b = new byte[1024];
            int temp = 0;
            //每次讀取一個1024的字節(jié)數(shù)組
            while((temp = in.read(b)) != -1){
              //輸出到文件
              out.write(b,0,temp);
            }
          } catch (Exception e) {
            e.printStackTrace();
          }finally {
            //關閉流
            try {
              if (in != null) {
                in.close();
              }
              if (out != null) {
                out.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      4. 通過字符緩沖流拷貝文件

      字符緩沖流只能讀取文本文件

       /**
         * 通過字符緩沖流實現(xiàn)文件的拷貝
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByBufferedChar(String sourcePath, String targetPath){
          //源文件路徑
          File source = new File(sourcePath);
          //目標文件路徑
          File target = new File(targetPath);
      
          //如果源文件不存在則不能拷貝
          if (!source.exists()) {
            return;
          }
          //如果目標文件目錄不存在則創(chuàng)建
          if (!target.getParentFile().exists()) {
            target.getParentFile().mkdirs();
          }
      
          BufferedReader in = null;
          BufferedWriter out = null;
      
          try {
            //字符緩沖輸入流和字符緩沖輸出流
            in = new BufferedReader(new FileReader(source));
            out = new BufferedWriter(new FileWriter(target));
      
            //讀取文件(每次讀取一行)
            String temp = null;
            while((temp = in.readLine()) != null){
              //輸出到文件
              out.write(temp);
            }
      
          } catch (Exception e) {
            e.printStackTrace();
          }finally {
            //關閉流
            try {
              if (in != null) {
                in.close();
              }
              if (out != null) {
                out.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      5. 通過JAVA NIO 非直接緩沖區(qū)拷貝文件

        /**
         * 通過JAVA NIO 非直接緩沖區(qū)拷貝文件
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByChannel(String sourcePath, String targetPath) {
          FileChannel outChannel = null;
          FileChannel inChannel = null;
      
          FileInputStream fis = null;
          FileOutputStream fos = null;
      
          try {
            fis = new FileInputStream(sourcePath);
            fos = new FileOutputStream(targetPath);
      
            //獲取通道
            inChannel = fis.getChannel();
            outChannel = fos.getChannel();
      
            //分配指定大小的緩沖區(qū)
            ByteBuffer buf = ByteBuffer.allocate(1024);
      
            while (inChannel.read(buf) != -1) {
              //轉(zhuǎn)換為讀取數(shù)據(jù)模式
              buf.flip();
              //寫入到磁盤
              outChannel.write(buf);
              //清空緩沖區(qū)
              buf.clear();
            }
      
          } catch (Exception e) {
            e.printStackTrace();
          } finally {
            //關閉流
            try {
              if (outChannel != null) {
                outChannel.close();
              }
              if (inChannel != null) {
                inChannel.close();
              }
              if (fis != null) {
                fis.close();
              }
              if (fos != null) {
                fos.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      6. 通過JAVA NIO 直接緩沖區(qū)拷貝文件

      /**
         * 通過JAVA NIO 直接緩沖區(qū)拷貝文件(內(nèi)存映射文件)
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByChannelBufferd(String sourcePath, String targetPath) {
          FileChannel inChannel = null;
          FileChannel outChannel = null;
          try {
            //獲取通道,StandardOpenOption.READ表示可讀,StandardOpenOption.WRITE表示可寫,StandardOpenOption.CREATE表示可以創(chuàng)建
            inChannel = FileChannel.open(Paths.get(sourcePath), StandardOpenOption.READ);
            outChannel = FileChannel.open(Paths.get(targetPath), StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.CREATE);
      
            //創(chuàng)建內(nèi)存映射文件
            MappedByteBuffer inMapped = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
            MappedByteBuffer outMapped = outChannel.map(FileChannel.MapMode.READ_WRITE, 0, inChannel.size());
      
            //直接操作內(nèi)存映射文件
            byte[] buf = new byte[inMapped.limit()];
            inMapped.get(buf);
            outMapped.put(buf);
      
          } catch (IOException e) {
            e.printStackTrace();
          } finally {
            //關閉流
            try {
              if (outChannel != null) {
                outChannel.close();
              }
              if (inChannel != null) {
                inChannel.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      7. 通過JAVA NIO 通道傳輸拷貝文件

      方式一

       /**
         * 通過JAVA NIO 通道傳輸拷貝文件
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByChannelTransfer(String sourcePath, String targetPath) {
          FileChannel inChannel = null;
          FileChannel outChannel = null;
          try {
            //獲取通道
            inChannel = FileChannel.open(Paths.get(sourcePath), StandardOpenOption.READ);
            outChannel = FileChannel.open(Paths.get(targetPath),StandardOpenOption.WRITE,StandardOpenOption.READ,StandardOpenOption.CREATE);
      
            inChannel.transferTo(0,inChannel.size(),outChannel);
          } catch (IOException e) {
            e.printStackTrace();
          }finally {
            //關閉流
            try {
              if (outChannel != null) {
                outChannel.close();
              }
              if (inChannel != null) {
                inChannel.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      方式二

       /**
         * 通過JAVA NIO 通道傳輸拷貝文件
         *
         * @param sourcePath 源文件路徑
         * @param targetPath 目標文件路徑
         */
        public static void copyFileByChannelTransfer2(String sourcePath, String targetPath) {
          FileInputStream fis = null;
          FileOutputStream fos = null;
          FileChannel inChannel = null;
          FileChannel outChannel = null;
          try {
            fis = new FileInputStream(sourcePath);
            fos = new FileOutputStream(targetPath);
      
            //獲取通道
            inChannel = fis.getChannel();
            outChannel = fos.getChannel();
      
            inChannel.transferTo(0,inChannel.size(),outChannel);
          } catch (IOException e) {
            e.printStackTrace();
          }finally {
            //關閉流
            try {
              if (outChannel != null) {
                outChannel.close();
              }
              if (inChannel != null) {
                inChannel.close();
              }
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }

      使用示例

      String source = "e:\\demo\\縱天神帝.txt";
          String target = "e:\\demo\\";
          long time1 = System.currentTimeMillis();
          copyFileByStream(source, target + "1.txt");
          System.out.println("通過字節(jié)流實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time1));
      
          long time2 = System.currentTimeMillis();
          copyFileByReaderAndWriter(source, target + "2.txt");
          System.out.println("通過字符流實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time2));
      
          long time3 = System.currentTimeMillis();
          copyFileByBuffered(source, target + "3.txt");
          System.out.println("通過字節(jié)緩沖流實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time3));
      
          long time4 = System.currentTimeMillis();
          copyFileByBufferedChar(source, target + "4.txt");
          System.out.println("通過字符緩沖流實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time4));
      
          long time5 = System.currentTimeMillis();
          copyFileByChannel(source, target + "5.txt");
          System.out.println("通過JAVA NIO通道(非直接緩沖區(qū))實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time5));
      
          long time6 = System.currentTimeMillis();
          copyFileByChannelBufferd(source, target + "6.txt");
          System.out.println("通過JAVA NIO通道(直接緩沖區(qū))實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time6));
      
          long time7 = System.currentTimeMillis();
          copyFileByChannelTransfer(source, target + "7.txt");
          System.out.println("通過JAVA NIO通道傳輸實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time7));
      
          long time8 = System.currentTimeMillis();
          copyFileByChannelTransfer(source, target + "8.txt");
          System.out.println("通過JAVA NIO通道傳輸2實現(xiàn)文件的拷貝耗時:" + (System.currentTimeMillis() - time8));

      通過測試發(fā)現(xiàn),使用JAVA NIO通道傳輸、JAVA NIO通道直接緩沖區(qū)以及字節(jié)緩沖流拷貝文件效率最高

      感謝各位的閱讀!關于“java實現(xiàn)文件拷貝的方法有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


      網(wǎng)站標題:java實現(xiàn)文件拷貝的方法有哪些
      網(wǎng)址分享:http://www.ef60e0e.cn/article/jjopeh.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        五寨县| 南开区| 邻水| 白朗县| 龙游县| 石嘴山市| 南靖县| 永兴县| 鄱阳县| 尖扎县| 施秉县| 石狮市| 鹤岗市| 准格尔旗| 石柱| 阿坝| 股票| 琼海市| 桐柏县| 嘉善县| 和龙市| 社旗县| 高陵县| 黄冈市| 五华县| 黔西县| 潮州市| 莱州市| 井冈山市| 湄潭县| 黄平县| 宣恩县| 云龙县| 西华县| 苏尼特左旗| 屏边| 梓潼县| 望都县| 晋中市| 漳浦县| 自治县|