利用Java复制文件到处都可以用到,这里总结了一个类供大家参考。里面总共有两个方法:
public static boolean copyFile(String srcFileName, String destFileName,boolean overlay);
public static boolean copyDirectory(String srcDirName, String destDirName,boolean overlay) ;
其中:
srcFileName 待复制的文件名
descFileName  目标文件名
overlay  如果目标文件存在,是否覆盖
如果复制成功返回true,否则返回false

代码:



Java中 文件复制函数 java复制文件代码_目标文件



1. import
2. import
3. import
4. import
5. import
6. import
7. import
8.   
9. import
10.   
11. /**
12.  * 复制文件或文件夹
13.  * 
14.  * zww
15.  */
16. public class
17.   
18. private static String MESSAGE = "";  
19.   
20. /**
21.      * 复制单个文件
22.      * 
23.      * @param srcFileName
24.      *            待复制的文件名
25.      * @param descFileName
26.      *            目标文件名
27.      * @param overlay
28.      *            如果目标文件存在,是否覆盖
29.      * @return 如果复制成功返回true,否则返回false
30.      */
31. public static boolean
32. boolean
33. new
34.   
35. // 判断源文件是否存在
36. if
37. "源文件:" + srcFileName + "不存在!";  
38. null, MESSAGE);  
39. return false;  
40. else if
41. "复制文件失败,源文件:" + srcFileName + "不是一个文件!";  
42. null, MESSAGE);  
43. return false;  
44.         }  
45.   
46. // 判断目标文件是否存在
47. new
48. if
49. // 如果目标文件存在并允许覆盖
50. if
51. // 删除已经存在的目标文件,无论目标文件是目录还是单个文件
52. new
53.             }  
54. else
55. // 如果目标文件所在目录不存在,则创建目录
56. if
57. // 目标文件所在目录不存在
58. if
59. // 复制文件失败:创建目标文件所在目录失败
60. return false;  
61.                 }  
62.             }  
63.         }  
64.   
65. // 复制文件
66. int byteread = 0; // 读取的字节数
67. null;  
68. null;  
69.   
70. try
71. new
72. new
73. byte[] buffer = new byte[1024];  
74.   
75. while ((byteread = in.read(buffer)) != -1) {  
76. 0, byteread);  
77.             }  
78. return true;  
79. catch
80. return false;  
81. catch
82. return false;  
83. finally
84. try
85. if (out != null)  
86.                     out.close();  
87. if (in != null)  
88.                     in.close();  
89. catch
90.                 e.printStackTrace();  
91.             }  
92.         }  
93.     }  
94.   
95. /**
96.      * 复制整个目录的内容
97.      * 
98.      * @param srcDirName
99.      *            待复制目录的目录名
100.      * @param destDirName
101.      *            目标目录名
102.      * @param overlay
103.      *            如果目标目录存在,是否覆盖
104.      * @return 如果复制成功返回true,否则返回false
105.      */
106. public static boolean
107. boolean
108. // 判断源目录是否存在
109. new
110. if
111. "复制目录失败:源目录" + srcDirName + "不存在!";  
112. null, MESSAGE);  
113. return false;  
114. else if
115. "复制目录失败:" + srcDirName + "不是目录!";  
116. null, MESSAGE);  
117. return false;  
118.         }  
119.   
120. // 如果目标目录名不是以文件分隔符结尾,则加上文件分隔符
121. if
122.             destDirName = destDirName + File.separator;  
123.         }  
124. new
125. // 如果目标文件夹存在
126. if
127. // 如果允许覆盖则删除已存在的目标目录
128. if
129. new
130. else
131. "复制目录失败:目的目录" + destDirName + "已存在!";  
132. null, MESSAGE);  
133. return false;  
134.             }  
135. else
136. // 创建目的目录
137. "目的目录不存在,准备创建。。。");  
138. if
139. "复制目录失败:创建目的目录失败!");  
140. return false;  
141.             }  
142.         }  
143.   
144. boolean flag = true;  
145.         File[] files = srcDir.listFiles();  
146. for (int i = 0; i < files.length; i++) {  
147. // 复制文件
148. if
149.                 flag = CopyFileUtil.copyFile(files[i].getAbsolutePath(),  
150.                         destDirName + files[i].getName(), overlay);  
151. if
152. break;  
153. else if
154.                 flag = CopyFileUtil.copyDirectory(files[i].getAbsolutePath(),  
155.                         destDirName + files[i].getName(), overlay);  
156. if
157. break;  
158.             }  
159.         }  
160. if
161. "复制目录" + srcDirName + "至" + destDirName + "失败!";  
162. null, MESSAGE);  
163. return false;  
164. else
165. return true;  
166.         }  
167.     }  
168.   
169. public static void
170. "C:/test/test0/test1";  
171. "c:/ttt";  
172. true);  
173.     }  
174. }



不考虑多线程优化,单线程文件复制最快的方法是(文件越大该方法越有优势,一般比常用方法快30+%):



Java代码

1. private static void
2. null;  
3. null;  
4. null;  
5. null;  
6. try
7. new
8. new
9.         in = inStream.getChannel();  
10.         out = outStream.getChannel();  
11. 0, in.size(), out);  
12. catch
13.         e.printStackTrace();  
14. finally
15.         close(inStream);  
16.         close(in);  
17.         close(outStream);  
18.         close(out);  
19.     }  
20. }


如果需要监测复制进度,可以用第二快的方法(留意buffer的大小,对速度有很大影响):



C-sharp代码



1. private static void
2. in = null;  
3. out = null;  
4. null;  
5. null;  
6. try
7. new
8. new
9. in
10. out
11.         ByteBuffer buffer = ByteBuffer.allocate(4096);  
12. while (in.read(buffer) != -1) {  
13.             buffer.flip();  
14. out.write(buffer);  
15.             buffer.clear();  
16.         }  
17. catch
18.         e.printStackTrace();  
19. finally
20.         close(inStream);  
21. in);  
22.         close(outStream);  
23. out);  
24.     }  
25. }



常用的方法1是:



C-sharp代码



    1. private static void
    2. null;  
    3. null;  
    4. try
    5. new BufferedInputStream(new
    6. new BufferedOutputStream(new
    7. byte[] buf = new byte[4096];  
    8. int
    9. while
    10.             fos.write(buf, 0, i);  
    11.         }  
    12.     }  
    13. catch
    14.         e.printStackTrace();  
    15. finally
    16.         close(fis);  
    17.         close(fos);  
    18.     }  
    19. }


    常用的方法2是:



    C-sharp代码


    1. private static void
    2. null;  
    3. null;  
    4. try
    5. new
    6. new
    7. byte[] buf = new byte[4096];  
    8. int
    9. while
    10.             fos.write(buf, 0, i);  
    11.         }  
    12.     }  
    13. catch
    14.         e.printStackTrace();  
    15. finally
    16.         close(fis);  
    17.         close(fos);  
    18.     }  
    19. }