将一个目录里面的文件及目录复制到另一个目录里面去及删除一个文件的子文件及子目录
当你想要复制某个文件的时候,最好主函数里面的删除方法注释掉,要不然虽然你的程序显示了复制的过程但当你查看文件夹的时候什么都看不见
//package com.atguigu.javase.housework;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Test {
public static void main(String[] args) {
File file1 = new File("D:\\搜狗高速下载");
File file2 = new File("C:\\搜狗高速下载");
dirSize(file1,file2);//执行文件的复制操作
deletefile(file2);//执行文件的删除操作,传入我们想要删除文件的根目录
//我们删除文件的时候总是想要在文件的根目录删除,这样子才符合计算机的特性,毕竟一个一个文件的删除太麻烦了
}
public static void dirSize(File file1,File file2) {
file2.mkdirs(); //创建想要传入c盘的目录
File[] listFiles = file1.listFiles();//获得file1下所有的子目录及子文件,可以用增强for循环打印
for(File file:listFiles) {
File flag = new File(file2,file.getName());
//file.getName();可以获得当前文件名,如果创建文件的时候传入两个参数,前面的是根目录
//后面的是子目录,创建文件的时候会自动添加文件及子文件之间的分隔符
if(file.isFile()) { //判断,如果file是文件,则进行复制操作
copy(file,flag);//左面的为现在的分解出来路径,右边的为获得的C盘的写入路径
}else if(file.isDirectory()) { // 判断,如果file是目录,则进行递归分解
dirSize(file, flag);//左边为原路径,递归调用的时候再分解,右边为想要写入c盘的路径
}
}
}
public static void copy(File file1,File file2) {
System.out.println("正在将"+file1+"里的文件复制到"+file2+"里面");
FileInputStream fis =null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file1); //我们现在用文件输入输出来实现读取,写入文件
fos = new FileOutputStream(file2);
不要去尝试用缓冲流,我试过了,效率更低
byte[] b = new byte[10000];//我们用字节数组来接收,长度随意,爱多少多少
int count = fis.read(b);//我们来查看
while(count!=-1) {
fos.write(b,0,count);
count = fis.read(b);
}
} catch (Exception e) {
// TODO: handle exception
} finally {
if(fis!=null) { //常规操作我们要关闭输入流输出流,否则无法写入磁盘
//有一个方法是flush(),可以帮助我们不用关闭流也可以提前将缓冲区的数据写入磁盘中
try {
fis.close();
} catch (Exception e2) {
// TODO: handle exception 这里其实不需要具体写出什么错误,空着就好
}
}
if(fos!=null) {
try {
fos.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
public static void deletefile(File file) {
File[] listFiles = file.listFiles(); //既然我们想要删除文件,那么我们就先要遍历一下文件夹
for(File dir:listFiles) { //然后用增强for循环来帮助我们循环
//System.out.println(dir); 这里是我想要看一下文件目录,多余的东西
if(dir.isFile()) {
dir.delete();
//当我们检查到这个dir是文件的时候,我们就使用文件的delete()方法帮助我们删除这个文件
}else if(dir.isDirectory()) {
deletefile(dir);
//当我们检查到这个dir是目录的时候,那么我们就开始递归,继续查找下一级文件或目录
}
}
file.delete();
//当我们将所有的子目录和子文件删除了,这个时候还有一个根目录我们没有管他,太碍眼了,删掉
}
}
}