文件复制
进行普通文件的复制
使用操作字节流的对象操作文件
// 文件复制
public class Main {public static void main(String[] args) throws IOException {// 输入两个路径, 源路径, 目的路径Scanner scanner = new Scanner(System.in);System.out.println("请输入拷贝文件的源路径:");String srcPath = scanner.next();System.out.println("请输入拷贝文件的目的路径:");String destPath = scanner.next();File src = new File(srcPath);if(!src.isFile()) {// 拷贝文件源路径错误System.out.println("源路径输入有误");return;}File dest = new File(destPath);if(dest.isFile()) {System.out.println("目的路径已存在拷贝文件");return;}try (InputStream inputStream = new FileInputStream(src);OutputStream outputStream = new FileOutputStream(dest)) {while(true) {int b = inputStream.read();if(b == -1) break;outputStream.write(b);}}}
}
运行结果
指定目录查找文件
扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
// 指定目录查找文件, 并删除
public class Main {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("请输入删除文件名称: ");String nameToDelete = scanner.next();scanDir(root, nameToDelete);}private static void scanDir(File root, String nameToDelete) {// 获取当前目录下的所有目录和文件File[] files = root.listFiles();if(files == null) return;for(File f : files) {if(f.isDirectory()) {// 如果是目录, 则递归搜索scanDir(f, nameToDelete);} else {// 如果是文件, 则判定是否是要删除的文件if(f.getName().contains(nameToDelete)) {System.out.println("确认是否删除文件: " + f.getAbsolutePath());String ok = scanner.next();if(ok.equals("y") || ok.equals("Y")) {f.delete();System.out.println("删除成功");}else{System.out.println("删除失败");}}}}}
}
运行结果
指定目录查找内容
扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)
package IO_review;import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;// 指定目录查找内容
public class Main {private static List<File> result = new ArrayList<>();public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 输入搜索目录System.out.println("请输入搜索目录: ");String rootPath = scanner.next();File rootDir = new File(rootPath);if(!rootDir.isDirectory()) {System.out.println("搜索目录输入有误");return;}// 输入搜索内容/文件名System.out.println("请输入指定内容: ");String token = scanner.next();// dfs搜索scanDir(rootDir, token);// 输出查询到的结果if(result == null) System.out.println("无查询结果");for (File f : result) {System.out.println(f.getAbsolutePath());}}// 搜索目录private static void scanDir(File rootDir, String token) {File[] files = rootDir.listFiles();if(files == null) return;// 遍历当前目录for(File f : files) {if(f.isDirectory()) {// 如果还是目录, 则递归查询目录scanDir(f, token);} else {// 如果是文件, 则查询文件名称及内容if(f.getName().contains(token)) {result.add(f);continue;}scanFile(f, token);}}}// 搜索文件private static void scanFile(File f, String token) {// try-with-resorces 语法try (InputStream inputStream = new FileInputStream(f);Scanner scanner = new Scanner(inputStream)) {String content = "";while(scanner.hasNext()) {// 获取当前文件的所有内容content += scanner.nextLine();}// 判定内容中是否包含指定内容if(content.contains(token)) {result.add(f);}} catch (IOException e) {e.printStackTrace();}}
}
运行结果