目录
例题一
例题二
例题一
- 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否删除该文件
代码如下:
package io; import java.io.File; import java.util.Scanner; //扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件 public class IODemo12 { private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { // 让用户输入一个指定搜索的目录 System.out.println("请输入要搜索的路径:"); String basePath = scanner.next(); // 针对用户输入进行简单判定 File root = new File(basePath); if(!root.isDirectory()) { // 路径不存在,或者只是一个普通文件,此时无法进行搜索 System.out.println("输入的目录有误!"); return; } // 再让用户输入一个要删除的文件名 System.out.println("请输入要删除的文件名:"); // 此处要使用 next 而不要使用 nextLine String nameToDelete = scanner.next(); // 针对指定路径进行扫描,递归操作 // 先从根目录出发(root) // 先判断下当前这个目录中是否包含需要删除的文件,如果是就删除,不是就跳过下一个 // 如果当前这里包含了一些目录,在针对子目录进行递归 scanDir(root, nameToDelete); } private static void scanDir(File root, String nameToDeleter) { // 打印日志 System.out.println("[scanDir]: " + root); // 先列出 root 下的文件和目录 File[] files = root.listFiles(); if(files == null) { // 当前 root 目录下没东西,是一个空目录 // 结束继续递归 return; } // 遍历当前的列出结果 for (File f : files) { if (f.isDirectory()) { // 如果是目录则继续递归 scanDir(f,nameToDeleter); }else { // 如果是普通文件,则判断是否要删除 if (f.getName().contains(nameToDeleter)) { System.out.println("确认是否要删除:" + f.getAbsolutePath() + "吗?"); String choice = scanner.next(); if(choice.equals("y") || choice.equals("Y")) { f.delete(); System.out.println("删除成功!"); }else { System.out.println("删除取消!"); } } } } } }
运行结果:
例题二
- 进行普通文件的复制
代码如下:
package io; import java.io.*; import java.util.Scanner; //进行普通文件复制 public class IODemo13 { public static void main(String[] args) { // 输入两个路径 Scanner scanner = new Scanner(System.in); System.out.println("请输入要拷贝哪个文件: "); String srcPath = scanner.next(); System.out.println("请输入要放到哪个地方:"); String destPath = scanner.next(); File srcFile = new File(srcPath); if(!srcFile.isFile()) { // 如果源不是一个文件(是个目录或者不存在) // 此时就不做任何操作 System.out.println("您当前输入的源路径有问题!"); return; } File destFile = new File(destPath); if(destFile.isFile()) { // 如果目标路径已经存在,认为也不能拷贝 System.out.println("您当前输入的目标路径有误!"); return; } // 进行拷贝操作 try (InputStream inputStream = new FileInputStream(srcFile); OutputStream outputStream = new FileOutputStream(srcFile)){ // 进行读文件操作 while (true) { int b = inputStream.read(); if(b == -1) { break; } // 注意 OutputStream 在写文件时,文件不存在,会自动创建 // 但是 InputStream 不行,如果文件不存在,就会抛异常 outputStream.write(b); } } catch (IOException e) { e.printStackTrace(); } } }
运行结果: