目录
1.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
1.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
package CSDN;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
/**
* @Author GoodManS
* @Description 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
*/
public class Demo6 {
public static void main(String[] args) {
System.out.println("请输入你要扫描的目录:");
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
File file1 = new File(str);
while (!file1.isDirectory()) {
System.out.println("不存在该扫描目录,请重新输入:");
str = scanner.nextLine();
file1 = new File(str);
}
System.out.println("请输入你想要查询内容的关键字:");
String key = scanner.nextLine();
List<File> ret = new LinkedList<>();
scanDir(file1, key, ret);
for (File i : ret) {
System.out.println(i.getAbsoluteFile());
}
}
public static void scanDir(File rootDir, String key, List<File> ret) {
File[] files = rootDir.listFiles();//这个方法返回的是 这个路径下所有文件和目录
if (files == null || files.length == 0) {
return;
}
for (File file : files) {
if (file.isDirectory()) {
scanDir(file, key, ret);
} else {
if (file.getName().contains(key)) {
ret.add(file.getAbsoluteFile());
}
}
}
}
}
2.文件的复制
package CSDN;
import java.io.*;
import java.util.Scanner;
/**
* @Author GoodManS
* @Description 进行普通文件的复制
*/
public class Demo8 {
public static void main(String[] args) throws IOException {
System.out.println("请输入你要复制的文件:");
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
File f1 = new File(str);
if (!f1.isFile()) {
System.out.println("文件路径输入错误!或者文件不是普通文件!请重新输入:");
str = scanner.nextLine();
f1 = new File(str);
}
copyFile(f1);
}
public static File copyFile(File file1) throws IOException {
File ret = new File("C:/Users/19396/Desktop/cs.txt");
try (InputStream is = new FileInputStream(file1)) {
try (OutputStream os = new FileOutputStream(ret)){
byte[] bytes = new byte[1024];
int len;
do {
len = is.read(bytes);
} while (len != -1);
os.write(bytes);
os.flush();
}
}
return ret;
}
}
3. 文件查找(也查找文件内容)
public class Demo {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
// 接收用户输入的路径
System.out.println("请输入要扫描的路径:");
String rootPath = scanner.next();
// 校验路径合法性
if (rootPath == null || rootPath.equals("")) {
System.out.println("路径不能为空。");
return;
}
// 根据输入的路径实例化文件对象
File rootDir = new File(rootPath);
if (rootDir.exists() == false) {
System.out.println("指定的目录不存在,请检查。");
return;
}
if (rootDir.isDirectory() == false) {
System.out.println("指定的路径不是一个目录。请检查。");
return;
}
// 接收要查找的关键字
System.out.println("请输入要查找的关键字:");
String token = scanner.next();
if (token == null || token.equals("")) {
System.out.println("查找的关键字不能为空,请检查。");
return;
}
// 遍历目录查找符合条件的文件
// 保存找到的文件
List<File> fileList = new ArrayList<>();
scanDir(rootDir, token, fileList);
// 打印结果
if (fileList.size() > 0) {
System.out.println("共找到了 " + fileList.size() + "个文件:");
for (File file: fileList) {
System.out.println(file.getAbsoluteFile());
}
} else {
System.out.println("没有找到相应的文件。");
}
}
private static void scanDir(File rootDir, String token, List<File> fileList) throws IOException {
// 获取目录下的所有文件
File[] files = rootDir.listFiles();
if (files == null || files.length == 0) {
return;
}
// 遍历
for (File file : files) {
if (file.isDirectory()) {
// 如果是文件就递归
scanDir(file, token, fileList);
} else {
// 文件名是否包含
if (file.getName().contains(token)) {
fileList.add(file);
} else {
if (isContainContent(file, token)) {
fileList.add(file.getAbsoluteFile());
}
}
}
}
}
private static boolean isContainContent(File file, String token) throws IOException {
// 定义一个StringBuffer存储读取到的内容
StringBuffer sb = new StringBuffer();
// 输入流
try (InputStream inputStream = new FileInputStream(file)) {
try (Scanner scanner = new Scanner(inputStream, "UTF-8")) {
// 读取每一行
while (scanner.hasNext()) {
// 一次读一行
sb.append(scanner.nextLine());
// 加入一行的结束符
sb.append("\r\n");
}
}
}
return sb.indexOf(token) != -1;
}
}