本案例要求编写一个文件管理器,实现文件的批量操作。文件管理器具体功能要求如下: (1)用户输入指令1,代表“指定关键字检索文件”,此时需要用户输入检索的目录和关键字,系统在用户指定的目录下检索出文件名中包含关键字的文件,并将其绝对路径展示出来。 (2)用户输入指令2,代表“指定后缀名检索文件”,此时需要用户输入检索的目录和后缀名(多个后缀名用逗号分隔),系统在用户指定的目录下检索出指定后缀名的文件,并将其绝对路径展示出来。 (3)用户输入指令3,代表“复制文件/目录”,此时需要用户输入源目录和目标目录,程序执行后会将源目录下的内容复制到目标目录下。 (4)用户输入指令4,代表“退出”,即退出该系统。
时间: 2024-02-21 19:59:08 浏览: 55
以下是一个简单的文件管理器的实现,可以满足上述要求:
```java
import java.io.*;
import java.util.*;
public class FileManager {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入指令(1:指定关键字检索文件,2:指定后缀名检索文件,3:复制文件/目录,4:退出):");
int command = scanner.nextInt();
scanner.nextLine();
switch (command) {
case 1:
searchByKeyword(scanner);
break;
case 2:
searchBySuffix(scanner);
break;
case 3:
copyDirectory(scanner);
break;
case 4:
System.out.println("退出文件管理器");
return;
default:
System.out.println("无效指令");
break;
}
}
}
// 指定关键字检索文件
private static void searchByKeyword(Scanner scanner) {
System.out.println("请输入目录路径:");
String directory = scanner.nextLine();
System.out.println("请输入关键字:");
String keyword = scanner.nextLine();
File dir = new File(directory);
if (!dir.isDirectory()) {
System.out.println("输入的不是目录路径");
return;
}
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.contains(keyword);
}
});
System.out.println("检索结果:");
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
// 指定后缀名检索文件
private static void searchBySuffix(Scanner scanner) {
System.out.println("请输入目录路径:");
String directory = scanner.nextLine();
System.out.println("请输入后缀名(多个后缀名用逗号分隔):");
String[] suffixes = scanner.nextLine().split(",");
File dir = new File(directory);
if (!dir.isDirectory()) {
System.out.println("输入的不是目录路径");
return;
}
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
for (String suffix : suffixes) {
if (name.endsWith(suffix)) {
return true;
}
}
return false;
}
});
System.out.println("检索结果:");
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
// 复制文件/目录
private static void copyDirectory(Scanner scanner) {
System.out.println("请输入源目录路径:");
String sourceDirectory = scanner.nextLine();
System.out.println("请输入目标目录路径:");
String targetDirectory = scanner.nextLine();
File source = new File(sourceDirectory);
File target = new File(targetDirectory);
if (!source.exists()) {
System.out.println("源目录不存在");
return;
}
if (!target.exists()) {
target.mkdirs();
}
if (!source.isDirectory()) {
// 如果源目录不是目录,则复制单个文件
copyFile(source, new File(targetDirectory, source.getName()));
} else {
// 如果源目录是目录,则递归复制目录
File[] files = source.listFiles();
for (File file : files) {
if (file.isDirectory()) {
copyDirectory(new File(sourceDirectory, file.getName()), new File(targetDirectory, file.getName()));
} else {
copyFile(file, new File(targetDirectory, file.getName()));
}
}
}
}
// 复制单个文件
private static void copyFile(File source, File target) {
try (FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(target)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
注意,上述代码只是一个简单的示例,实际上还有很多细节需要注意,例如异常处理、路径格式等问题。在实际开发中,需要更加严谨地处理这些问题。
阅读全文