不多比比,直接上代码~~
复制文件方法:每KB读取技巧、循环条件终止判断、字符缓冲拼接~
复制文件夹方法:边界判断、子文件夹递归~
package 对象流;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class 文件复制 {
public static void copyFile(String srcPath, String destPath){
File f1 = new File(srcPath);
File f2 = new File(destPath);
StringBuffer bs = new StringBuffer();
byte[] b = new byte[1024];
int len;
try(FileInputStream fis = new FileInputStream(f1);
FileOutputStream fos = new FileOutputStream(f2);
){
while(-1!=(len = fis.read(b))){
String s = new String(b,0,len);
bs.append(s);
}
fos.write(bs.toString().getBytes());
fos.flush();
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// copyFile("E:\\360Downloads\\自动创建类.txt","E:\\360Downloads\\目标.txt");
copyFolder("E:\\360Downloads\\文件夹复制源文件夹","E:\\360Downloads\\文件夹复制目标文件夹");
}
public static void copyFolder(String srcPath, String destPath){
File srcFolder = new File(srcPath);
File destFolder = new File(destPath);
if(!srcFolder.exists())
return;
if(!srcFolder.isDirectory())
return;
if(destFolder.isFile())
return;
if(!destFolder.exists())
destFolder.mkdirs();
//遍历文件夹
File[] files = srcFolder.listFiles();
for(File f:files) {
//如果是文件,就用文件复制的方法~
if(f.isFile()) {
File newDestFile = new File(destFolder,f.getName());
copyFile(f.getAbsolutePath(),newDestFile.getAbsolutePath());
}
//如果是文件夹,就递归~
if(f.isDirectory()) {
File newDestFolder = new File(destFolder,f.getName());
copyFolder(f.getAbsolutePath(),newDestFolder.getAbsolutePath());
}
}
}
}