java实现文件夹的复制

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();
}
}

__EOF__

本文作者Reisen7
本文链接https://www.cnblogs.com/reisen7/p/18547127.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Reisen7  阅读(15)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示