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. }
Java NIO复制文件功能
最新推荐文章于 2021-04-23 10:17:13 发布