java实现拷贝一个文件夹,里面存在目录和文件,使用文件创建和文件流

本文介绍了一个使用Java实现的文件夹拷贝程序。该程序能够处理文件夹内的所有文件和子目录,并通过递归方式完成复制过程。利用RandomAccessFile进行文件内容的读取与写入。

内容我都在注释里说明了,有什么不懂的可以问我.主要是为了回顾下文件的创建和文件流的读写,所以写了这个拷贝的代码,还可以添加很多功能,像拷贝哪个文件到哪都是可以改个,可以用scanner输入,还有就是可以再加个delete()那么程序就变成剪切功能了.得意

package io;

import java.io.File;
import java.io.RandomAccessFile;
/**
 * java实现拷贝一个文件夹,里面存在目录和文件,使用文件创建和文件流
 * 读到file文件复制里面的内容,读到目录,复制目录,并查看里面是否还有文件
 * @author 温先生
 *
 */
public class FileCopy {
	public static void main(String[] args) throws Exception {
		FileCopy fileCopy = new FileCopy();
		String fixed = "a/b/c/d";//fixed定义为固定,就是你要粘贴到这里
		String moveto = "a/c";//moveto定义为移动的文件
		String[] movetos = moveto.split("/");//切割的目的是得到c文件,去掉前面的文件路径,一定要去掉,不然后面会因为路径错误找不到文件
		String moveto_cut= movetos[movetos.length-1];
		File file1 = new File(moveto);//创建file1对象,固定file1为拷贝的文件,同下
		if (file1.isFile()) {//判断是否为文件
			//创建file1对象,固定file2为拷贝形成的文件或目录,同下
			File file2 = new File(fixed+"/"+moveto_cut);//这里用切割后的,很容易理解为什么
			file2.createNewFile();//创建一个文件
			//读取原文件里面的数据,存到新文件里
			RandomAccessFile raf = new RandomAccessFile(file1, "rw");
			byte[] bs = new byte[(int) file1.length()];
			raf.read(bs);
			RandomAccessFile raf2 = new RandomAccessFile(file2, "rw");
			raf2.write(bs);
			raf.close();
			raf2.close();
		}
		if (file1.isDirectory()) {//判断是否为目录
			File file2 = new File(fixed+"/"+moveto_cut);
			file2.mkdir();
			fileCopy.copy(fixed+"/"+moveto_cut, moveto);
		}
	}	
	public void copy(String fixed,String moveto) throws Exception {
		System.out.println(fixed);//打桩查看数据
		System.out.println(moveto);//打桩查看数据
		File file = new File(moveto);//这里定义为file,因为要获取file里面所有的文件目录和文件
		File[] files = file.listFiles();//获取file里面所有的文件目录和文件
		for (int i=0;i<files.length;i++) {
			if (files[i].isFile()) {
				File file2 = new File(fixed+"/"+files[i].getName());//要新建文件的目录+文件名
				System.out.println("创建了文件:"+files[i].getName());
				File file1 = new File(moveto+"/"+files[i].getName());//原拷贝文件的目录+文件名
				file2.createNewFile();//创建一个文件
				//读取原文件里面的数据,存到新文件里
				RandomAccessFile raf = new RandomAccessFile(file1, "rw");
				byte[] bs = new byte[(int) file1.length()];
				raf.read(bs);
				RandomAccessFile raf2 = new RandomAccessFile(file2, "rw");
				raf2.write(bs);
				raf.close();
				raf2.close();
			}
			if (files[i].isDirectory()) {
				moveto=moveto+"/"+files[i].getName();//文件的目录
				File file2 = new File(moveto);//要新建文件的目录
				System.out.println("创建了目录:"+files[i].getName());
				file2.mkdir();//创建一个目录
				copy(fixed+"/"+files[i].getName(), moveto);//递归
			}
		}
	}
}


                
Java实现拷贝文件夹里的文件到另一个文件夹,可参考已有拷贝文件夹文件嵌套的思路,不过要略作调整,不递归处理子文件夹,只处理文件。以下为示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileCopy { private static void handleCopyFile(File src, File dest) throws IOException { if (!dest.exists()) { if (dest.mkdir()) { System.out.println("文件夹创建成功"); } else { System.out.println("文件夹已经存在"); } } File[] files = src.listFiles(); if (files != null) { for (File file : files) { if (file.isFile()) { try (FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(new File(dest, file.getName()))) { byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) > 0) { fos.write(buffer, 0, length); } } } } } System.out.println("源文件夹中的文件拷贝完毕"); } public static void main(String[] args) { File srcFolder = new File("path/to/source/folder"); File destFolder = new File("path/to/destination/folder"); try { handleCopyFile(srcFolder, destFolder); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码定义了`handleCopyFile`方法,该方法接收源文件夹目标文件夹作为参数。首先尝试创建目标文件夹,接着获取源文件夹中的所有文件文件夹,遍历这些文件文件夹,若为文件,则使用`FileInputStream``FileOutputStream`将文件从源文件夹拷贝到目标文件夹中,不处理子文件夹
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值