递归遍历目录 和 普通文件的复制 [Java EE]
递归遍历目录
首先
先列出当前目录所包含的内容
File[] files = currentDir.listFiles();
if (files == null || files.length == 0) {
// 若是空目录或非法目录, 则直接返回
return;
}
然后
遍历列出的文件, 分情况两种讨论
for (File f: files) {
// 加个日志, 方便查看程序执行情况
System.out.println(f.getAbsolutePath());
if (f.isFile()) {
// 如果当前文件是普通文件, 看看文件名是否包含了 word, 来决定是否删除
dealFile(f, word);
}else {
// 如果当前文件时目录文件, 就递归执行 scanDir
scanDir(f, word);
}
}
最后完整代码展示
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要搜索的根目录: ");
File rootPath = new File(scanner.next()) ;
System.out.println("请输入要删除的关键词:");
String word = scanner.next();
if (!rootPath.isDirectory()) {
System.out.println("您此时输入的路径不是合法目录!");
return;
}
scanDir(rootPath, word);
}
public static void scanDir(File currentDir, String word) {
File[] files = currentDir.listFiles();
if (files == null || files.length == 0) {
return;
}
for (File f: files) {
System.out.println(f.getAbsolutePath());
if (f.isFile()) {
dealFile(f, word);
}else {
scanDir(f, word);
}
}
}
private static void dealFile(File f, String word) {
if (!f.getName().contains(word)) {
System.out.println("未找到你所输入的关键字文件, 程序将结束!");
return;
}
System.out.println("该文件是: "+ f.getAbsolutePath() + ", 是否要确认删除? (Y/N)");
String choise = scanner.next();
if (choise.equals("Y") || choise.equals("y")) {
f.delete();
}
}
普通文件复制
// 把文件 A 复制成 文件 B 的基本步骤就是: 先打开文件 A , 依次读取文件 A 的每个字节, 然后再写入文件 B 就可以
// 直接代码展示一下
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
System.out.println("请输入要复制的文件路径: ");
String src = s.next();
File srcFile = new File(src);
if (!srcFile.isFile()) {
System.out.println("您输入的源文件路径非法!");
return;
}
System.out.println("请输入要复制的目标路径: ");
String dest = s.next();
File destFile = new File(dest);
if (!destFile.getParentFile().isDirectory()) {
System.out.println("您输入的目标文件路径非法! ");
return;
}
try (InputStream inputStream = new FileInputStream(srcFile);
OutputStream outputStream = new FileOutputStream(destFile)){
while (true) {
byte[] buffer = new byte[20480];
int n = inputStream.read(buffer);
System.out.println("n = " + n);
if (n == -1) {
System.out.println("读取到 eof, 循环结束");
break;
}
outputStream.write(buffer,0,n);
}
}
}