package file;
import java.io.*;
/*
如何拷贝文件目录?
*/
public class CopyDirectory {
public static void main(String[] args) {
File src=new File("D:\\学习视频");
File dest=new File("D:\\学习视频-new");
copyDirectory(src,dest);
}
public static void copyDirectory(File srcDirectory,File destDirectory){
InputStream inputStream=null;
OutputStream outputStream=null;
try {
if (srcDirectory.isDirectory()) {//判断源目录是否是是目录
if (!destDirectory.exists()) {//如果目标目录不存在的话,我们就去创建以你输入的这个抽象路径名命名的目录
destDirectory.mkdir();//mkdir()方法就是创建由此抽象路径名命名的目录
}
//然后去遍历源目录的整个目录下的所有内容
String[] list = srcDirectory.list();//list()方法返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
for (String file : list) {
File srcFile = new File(srcDirectory, file);//使用File类创建一个源文件对象,然后进行传参,把遍历到的内容传递给我们这个方法中传递的参数srcDirectory。
File destFile = new File(destDirectory, file);//使用File类创建一个目标文件对象,然后进行传参,把遍历到的内容传递给我们这个方法中传递的参数srcDirectory。
copyDirectory(srcFile, destFile);//然后使用递归的方法,一遍又一遍的进入这个方法,把遍历到的内容一个一个的复制到目标目录中。
//递归,就是自己调自己。
}
} else {//然后判断其它情况,如果源目录不是一个目录的情况下
//如果源目录不是一个目录的情况下,那么它就是一个文件,文件的话,我们可以直接创建字节输入、输出流进行copy操作。
//1.创建字节输入、输出流。
inputStream = new FileInputStream(srcDirectory);
outputStream = new FileOutputStream(destDirectory);
//2.读写操作
//使用缓冲区来存储数据,如果缓冲区满的时候,就一次性进行输出。
byte[] buffer = new byte[1024];
//存储每次读取到的字节数
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {//然后去进行读入操作,如果读到文件末尾时为-1。
outputStream.write(buffer, 0, len);
}
}
}catch (IOException e) {
e.printStackTrace();
}finally {
//3.最后进行关流操作。(因为流是占用系统资源的,所以用完之后,最后一定要进行关流操作)
if (outputStream!=null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream!=null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package file;
import java.io.File;
/*
如何删除文件目录?
实现思路:先删除文件目录下的所有文件,再删除这个空的文件夹。
*/
public class Delete {
public static void main(String[] args) {
deleteAllFile("D:\\c");//先删除这个文件夹中的所有子文件
deleteFolder("d:\\c");//最后再删除这个空的文件夹
}
public static boolean deleteAllFile(String filePath) {//这个方法就是删除文件目录下的所有文件
boolean flag = false;
File file = new File(filePath);
if (!file.exists()) {//如果这个文件不存在就返回为false
return flag;
}
if (!file.isDirectory()) {//如果这个文件不是一个目录也返回为false
return flag;
}
String[] list = file.list();//返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 因为我们要删除的就是目录中的文件和目录,所以用list()方法很合适
File temp = null;//然后创建一个File类的temp对象为空的。
for (int i = 0; i < list.length; i++) {//然后遍历这个字符串数组
if (filePath.endsWith(File.separator)) {//如果你输入的这个文件路径是以分隔号结尾的
temp = new File(filePath + list[i]);//那么就直接把这个输入的路径及路径下的文件给到这个temp
} else {//如果你输入的文件路径不是以分隔号结尾的
temp = new File(filePath + File.separator + list[i]);//那么你就要把文件路径+分隔号+路径下的子文件给到这个temp
}
if (temp.isFile()) {//然后进行判断,如果这个temp是文件
temp.delete();//就进行删除
}
if (temp.isDirectory()) {//如果是目录
deleteAllFile(filePath + "/" + list[i]);//就先删除这个文件夹中的所有子文件
deleteFolder(filePath+"/"+list[i]); //再删除这个空的文件夹
flag=true;
}
}
return flag;
}
public static void deleteFolder(String folderPath){//这个方法就是删除最后空的文件夹
deleteAllFile(folderPath);//先删除这个文件夹路径下的所有文件
String filePath=folderPath;//然后把这个输入的文件夹路径赋给这个String类型的字符串filePath
//由于第一步我们就删除了这个文件夹路径下的所有文件,所以现在的这个filePath就是一个空的文件夹
File myFilePath=new File(filePath);//然后我们再去创建File类对象把这个空的文件夹作为参数传进去
//然后删除这个空的文件夹,因为delete()可以直接删除空的文件夹
myFilePath.delete();
}
}
----------------------------------------------------------------------------------------
简单的写法:
package file;
import java.io.File;
public class DeleteDirectory {
public static void main(String[] args) {
File fileTwo=new File("d:\\a");
deleteFile(fileTwo);
}
public static void deleteFile(File file){
File[] files = file.listFiles();
for (File file1:files) {
if (file1.isFile()) {//判断如果它是文件就直接删除
file1.delete();
} else if (file1.isDirectory()) {//如果它是一个目录,也就是文件夹中包含有子文件,
deleteFile(file1);//然后我们就使用递归,自己调自己,一个一个的进行删除。
}
}
file.delete();//最后删除这个空的文件夹
}
}