文件复制
进行普通文件的复制
使用操作字节流的对象操作文件
// 文件复制
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();
}
}
}
运行结果