package javaio.recursion.Reader;
import java.io.*;
import java.util.*;
public class Copyfile {
public static void main(String[] args) throws IOException {
Scanner s=new Scanner(System.in);
System.out.println("输入你想要复制的文件或文件夹");
String str1=s.next();
System.out.println("输入你想要粘贴在哪的文件或文件夹");
String str2=s.next();
File f1=new File(str1);
File f2=new File(str2);
if(f1.exists()) //先判断f1是否存在
copy(f1,f2);
else
System.out.println("想要复制的文件不存在");
}
public static void copy(File fs,File ft) throws IOException {
if(fs.isFile()&&ft.isFile()){
if(fs.getName().equals(ft.getName()))
ft=new File(ft,ft.getName()+"-副本"); //同名的改名
copyfile(fs,ft);
}
if(fs.isDirectory()&&ft.isDirectory()) {
File[] f=fs.listFiles(); //fs 下的每个子目录
File tmp=ft;
ft=new File(ft,fs.getName());
if(!ft.mkdirs()) {
ft=new File(tmp,fs.getName()+"-副本"); //如果是相同的文件名 即目录创建失败 则改名
ft.mkdirs();
}
for(File x:f) {
File c=new File(ft,x.getName()); //创建同名的目录或文件抽象
System.out.println("复制"+c.getName());
if(x.isDirectory()){
c.mkdirs(); //创建目录
copy(x,c);
}else{
c.createNewFile();
copyfile(x,c);
}
}
}
if(fs.isFile()&&ft.isDirectory()) {
File tmp=ft; //用于存ft的路径,假如有重名的则调用这个变量
ft=new File(ft,fs.getName()); //若是将文件复制到一个目录,则应该在改目录下面创建一个文件
if(!ft.createNewFile()) {
ft=new File(tmp,fs.getName()+"-副本"); //同理,重名的进行改名
ft.createNewFile();
}
copyfile(fs,ft);
}
if(fs.isDirectory()&&fs.isFile()){
System.out.println("无法将目录复制到文件中/(ㄒoㄒ)/~~");
return;
}
}
public static void copyfile(File fs,File ft) throws IOException {
FileInputStream fi=new FileInputStream(fs);
FileOutputStream fo=new FileOutputStream(ft);
BufferedInputStream bfi = null;
BufferedOutputStream bfo =null;
bfi=new BufferedInputStream(fi);
bfo=new BufferedOutputStream(fo);
int count=-1;
while((count=bfi.read())!=-1) {
bfo.write(count);
}
bfo.flush();
bfo.close();
bfi.close();
}
}
java实现文件夹的复制
最新推荐文章于 2025-05-10 15:28:52 发布