File类——复制指定文件夹

输入需要复制的目标文件夹

输入需要复制到的目的文件夹

public class CopyDir {
	static Scanner in = new Scanner(System.in);
		static File dir=null;
	public static void main(String[] args) {
		System.out.println("请输入需要复制的目标文件夹的路径:");
		String need = in.nextLine();
		dir = new File(need);
//		dir = new File("F:\\0123");
		String fordir = dir.getPath();

		System.out.println("请输入复制到目的文件夹的路径:");
		String destDir = in.nextLine();
		File dest = new File(destDir);//把目的文件夹封装成文件对象 主要是判断该目的文件夹下是否 含有目标文件夹
		//目标文件夹  复制到该文件夹下
//		File dest = new File("F:");//\\MyServer

		//将目标文件夹的所有文件以及文件夹 复制到该文件夹下 该文件夹的名字肯能和目标文件夹同名
		destDir = dest.getPath()+"\\"+dir.getName();
		if(!dest.isDirectory()){
			System.out.println("请输入一个文件夹的路径");
			return;
		}
		//判断该目的文件夹下是否 含有目标文件夹
		else{
//			主要是想练习下 文件过滤  才写的以下代码    判断该目的文件夹下是否 含有目标文件夹
//			//如果dest为 文件而不是文件夹的话  listFiles方法会抛出NullPointerException异常
//			File[] files = dest.listFiles(new FilenameFilter(){
//				public boolean accept(File dir, String name) {
//					System.out.println(name);//dir就是dest 那么name就是dest下所有文件的名字包括文件夹和文件
//					return name.equals(CopyDir.this.dir.getName());
//				}});
//			System.out.println(files.length);
//			//长度等于1的时候说明复制到的目标文件夹下 有同名文件夹 也就是说 被复制的文件夹在复制到的文件夹内 此时 创建文件夹副本
//			if(files.length==1){
//				destDir = dest.getPath()+"\\"+dir.getName()+"-副本";

			//判断该目的文件夹下是否 含有目标文件夹   通过文件是否存在来判断
			File toDir = new File(destDir);
			if (toDir.exists()) {
				destDir = dest.getPath()+"\\"+dir.getName()+"-副本";
				toDir = new File(destDir);
			}
			int count = 0;
			while (toDir.exists()) {
				count++;
				if(!destDir.contains("-副本("+(count-1)+")"))
					destDir = dest.getPath()+"\\"+dir.getName()+"-副本(1)";
				else
					destDir = destDir.replace("-副本("+(count-1)+")", "-副本("+count+")");
				toDir = new File(destDir);
			}
			toDir.mkdir();
		}
		if (dir.isDirectory()){
			System.out.println("开始复制。。。");
			copyDir(dir,fordir,destDir);
		}
		else{
			System.out.println("您输入的不是文件夹!");
			return;
		}

		System.out.println("目标文件夹:"+dir.getName()+"->复制到目的文件夹:"+destDir+",,复制成功");
	}

	public static void copyDir(File dir,String fordir,String destDir) {
		File[] files = dir.listFiles();
		for (File file : files) {
			//注意  要先创建该文件夹对应的目的的新同名文件夹 然后递归
			if(file.isDirectory()){
				//将文件夹内的文件复制到另一个文件夹中 在复制文件前 需要先创建存放文件的文件夹
				File toDir = new File(file.getPath().replace(fordir, destDir));
				toDir.mkdir();
				//先创建 文件夹  再递归
				copyDir(file,fordir,destDir);
			}
			else{
				//复制的新文件
				File tofile = new File(file.getPath().replace(fordir, destDir));
				try {
					tofile.createNewFile();
					FileInputStream fis = new FileInputStream(file);
					FileOutputStream fos = new FileOutputStream(tofile);
					byte[] buf = new byte[1024];
					int len = 0;
					while ((len = fis.read(buf))!=-1) {
						fos.write(buf,0,len);
					}
					fis.close();
					fos.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}
/*
复制文件夹
从原文件夹中读取文件  赋值到文件夹副本中 实际上就是复制文件到 创建的文件夹副本中
1,从原文件夹中读取数据fs[i].isFile()  fs[i]是 文件的时候  直接复制
2,		fs[i]是文件夹的时候 首先 创建子文件夹副本 然后将原子文件夹内的文件复制到文件夹副本中
	子文件夹副本在上一级文件夹副本中  定义一个字符串存储 文件路径

*/
class copyDir
{
	String s = "null";//最外层 目录路径
	String path = "null";//定义一个字符串存储 文件路径
	public void readDir(File f,int lev) throws Exception//形参f代表的是 原文件夹
	{
		lev++;
		if(lev == 1)
		{
			s = f.getName();
			System.out.println(s);
			path = f.getPath().replaceAll(s,s+"副本");
			System.out.println(path);
			File dir = new File(path);
			System.out.println(dir.mkdir());
		}
		//原文件中的数据
		File[] fs = f.listFiles();
		for (int i=0 ;i<fs.length ;i++ )
		{
			if (fs[i].isFile())
			{
				path = fs[i].getParent().replaceAll(s,s+"副本");
				File fc = new File(path,fs[i].getName());
				//文件创建之前 一定要保证路径存(文件所在的文件夹)在 否则抛异常
				fc.createNewFile(); 
				//将文件 复制到新文件中
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fs[i]));
				BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fc));
				byte[] buf = new byte[1024];
				int len=0;
				while ((len=bis.read(buf,0,1024))!=-1)
				{
					bos.write(buf,0,len);
				}
				bos.close();
				bis.close();

			}
			//是文件夹的话  创建文件夹副本
			if (fs[i].isDirectory())
			{
				path = fs[i].getPath().replaceAll(s,s+"副本");;
				File dir = new File(path);
				//创建文件夹
				dir.mkdir();
				readDir(fs[i],lev);
			}
		}
	}
	public static void main(String[] args) throws Exception
	{
		File f = new File("F:\\0123");
		Long start = System.currentTimeMillis();
		new copyDir().readDir(f,0);
		Long over = System.currentTimeMillis();
		System.out.println("文件夹复制成功,耗时:"+(over-start));

	}
}

File类——复制指定文件夹

时间: 2024-08-26 12:16:22

File类——复制指定文件夹的相关文章

File类——renameTo()将文件夹内的所有指定类型文件 移动到另一个文件夹内

* 由于   张孝祥-7K月薪面试题破解之一_交通灯管理系统视频教程 文件夹下 的视频文件都存放在每个子文件夹中 * 需求:将所有视频文件全部移动到  张孝祥-7K月薪面试题破解之一_交通灯管理系统视频教程文件夹下  原来存放视频的子文件夹删除 public class moveFiles { public static void main(String[] args) { // TODO Auto-generated method stub File f = new File("D:\\Bai

JavaSE8基础 File list 获取指定文件夹下的第一层文件和文件夹的名字

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) information: 被查看文件夹中的内容截图. code: package jizuiku0; import java.io.File; /* * @version V17.09 */ public class GetName { public static void main(String[] args) { String

java _io_ File类创建目录和文件夹

.mkdir() //创建目录,如果父目录不存在,则不会创建成功.mkdirs() //创建目录,如果父目录不存在,则会一起创建.list() //列出下级名称,返回的是一个字符串数组.listFiles() //返回子目录对象,返回的是一个File类型的数组.listRoots() //根路径,从盘符(C:或D盘)出发,拿到所有的文件 创建文件夹和目录: File f=new File("D:/d/dir/test"); boolean flag=f.mkdir(); System.

遍历指定文件夹下的所有图片,并复制到指定目录下

import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; public class Copy { /** * 遍历文件夹下的所有图片文件,并复制到指定文件夹下 */ static String srcfile = "E:/I

[转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件 折腾: C#中如何在右下角添加提示窗口,用于显示打开文件和文件夹 的过程中,需要实现,点击对应LinkLabel后,调用资源管理器,打开对应的文件夹. [

apk当安装程序将文件复制到手机自带的指定文件夹

项目已获得,今天.apk文件以获得另一个非调试手机,发现一个问题. 由于涂料.所以绘图数据的点存储在一个.txt文字档.把它用usb传到指定目录下的,可是明显不科学,由于用户下载了你的.apk文件,你却告诉他,还要把这个文本文件复制到指定的目录下.所以,我就要解决问题.就是把文本文件打包在apk文件里,安装.apk时就让创建一个程序目录.然后把文本文件复制到这个目录目录里,用户执行程序,就能够画图,不用再让他拷贝一份画图的点的坐标的数据.同理,事实上我这里还有设计轨廓的数据和标准轨廓的数据也是要

C#实现把指定文件夹下的所有文件复制到指定路径下以及修改指定文件的后缀名

1.实现把指定文件夹下的所有文件复制到指定路径下 1 public static void copyFiles(string path) { 2 DirectoryInfo dir = new DirectoryInfo(path); 3 if (!dir.Exists) 4 return; //获得指定文件夹内的所有的子目录信息 5 DirectoryInfo[] dirs = dir.GetDirectories(); //获得指定文件夹内所有的文件信息 6 FileInfo[] files

JAVA之File类-将指定目录下的所有java文件的绝对路径存储到文本文件中

/* * 将指定目录下的所有java文件的绝对路径存储到文本文件中 * 建立一个java列表. * 思路: * 1.对指定目录进行递归 * 2.获取递归过程所有的java文件的路径 * 3.将这些路径存储在集合中 * 4.将集合中的内容写到文本文件 * 注:3,4步骤也可以合并成一个步骤 */ package ioTest.io3; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; imp

FTP上传指定文件夹及其文件到服务器

1.在服务器端的IIS上建立一个FTP站点 注意事项:路径关联到你要存放(上传内容)的文件夹名称: 指定这个FTP站点的ip地址和端口号 2.本地准备代码 -------------------------------2.1上传类--------------------------------------------------------- public class Up    {        /// <summary>        ///   上传文件菜单        /// <