java nio 複製文件功能

 

  1. package com.ghb.crp.file;   
  2.   
  3. import java.io.BufferedInputStream;   
  4. import java.io.BufferedOutputStream;   
  5. import java.io.File;   
  6. import java.io.FileInputStream;   
  7. import java.io.FileOutputStream;   
  8. import java.nio.ByteBuffer;   
  9. import java.nio.channels.FileChannel;   
  10.   
  11. public class FileCopy {   
  12.     public static String src = "f://ss.rmvb";   
  13.     public static String dist = "f://ss2.rmvb";   
  14.   
  15.     /**  
  16.      * @param args  
  17.      */  
  18.     public static void main(String[] args) {   
  19.         long start = System.currentTimeMillis();   
  20.         copyNew();   
  21.         long end = System.currentTimeMillis();   
  22.         System.out.println("nio 用時: " + (end - start));   
  23.   
  24.         long start2 = System.currentTimeMillis();   
  25.         copyOld();   
  26.         end = System.currentTimeMillis();   
  27.         System.out.println("io 用時: " + (end - start2));   
  28.     }   
  29.   
  30.     public static void copyOld() {   
  31.         File srcFile = new File(src);   
  32.         File distFile = new File(dist);   
  33.         if (distFile.exists()) {   
  34.             distFile.delete();   
  35.         }   
  36.         try {   
  37.             FileInputStream fin = new FileInputStream(srcFile);   
  38.             BufferedInputStream buffIn = new BufferedInputStream(fin);   
  39.   
  40.             FileOutputStream fout = new FileOutputStream(distFile);   
  41.             BufferedOutputStream buffout = new BufferedOutputStream(fout);   
  42.             byte[] bytes = new byte[1024];   
  43.             while (buffIn.read(bytes) > 0) {   
  44.                 buffout.write(bytes);   
  45.             }   
  46.             fin.close();   
  47.             buffIn.close();   
  48.             fout.close();   
  49.             buffout.close();   
  50.         } catch (Exception e) {   
  51.             e.printStackTrace();   
  52.         }   
  53.   
  54.     }   
  55.   
  56.     public static void copyNew() {   
  57.         try {   
  58.             File srcFile = new File(src);   
  59.             File distFile = new File(dist);   
  60.             if (distFile.exists()) {   
  61.                 distFile.delete();   
  62.             }   
  63.   
  64.             FileInputStream fin = new FileInputStream(srcFile);   
  65.             FileOutputStream fout = new FileOutputStream(distFile);   
  66.             FileChannel inChannel = fin.getChannel();   
  67.             FileChannel outChannel = fout.getChannel();   
  68.             int ByteBufferSize = 1024 * 100;   
  69.             ByteBuffer buff = ByteBuffer.allocate(ByteBufferSize);   
  70.   
  71.             while (inChannel.read(buff) > 0) {   
  72.                 buff.flip();   
  73.                 if (inChannel.position() == inChannel.size()) {// 判斷是不是最後一段數據   
  74.                     int lastRead = (int) (inChannel.size() % ByteBufferSize);   
  75.                     byte[] bytes = new byte[lastRead];   
  76.                     buff.get(bytes, 0, lastRead);   
  77.                     outChannel.write(ByteBuffer.wrap(bytes));   
  78.                     buff.clear();   
  79.                 } else {   
  80.                     outChannel.write(buff);   
  81.                     buff.clear();   
  82.                 }   
  83.             }// 這個使用FileChannel 自帶的複製   
  84.             // outChannel.transferFrom(inChannel, 0, inChannel.size());   
  85.             outChannel.close();   
  86.             inChannel.close();   
  87.             fin.close();   
  88.             fout.close();   
  89.         } catch (Exception e) {   
  90.             e.printStackTrace();   
  91.         }   
  92.     }   
  93. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章