用java来实现从命令行输入一个带路径的文件夹地址信息 ,列出该文件夹下所有文件,将所有文件的info信息(包括:文件名、大小、最后修改时间等)按对象形式记录到文件中。 3. 用实际文件状况(截屏资源管理器)与记录在文件中的状况比较,检查实际文件是否变化
时间: 2024-02-05 20:10:58 浏览: 78
列出目录中所有文件(含文件夹)
可以使用Java的File类和相关的方法来实现这个需求。以下是一个简单的实现:
```java
import java.io.*;
import java.util.*;
public class FileInformation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入文件夹路径:");
String folderPath = scanner.nextLine();
File folder = new File(folderPath);
if (folder.exists() && folder.isDirectory()) {
File[] files = folder.listFiles();
List<FileObject> fileObjects = new ArrayList<>();
for (File file : files) {
FileObject fileObject = new FileObject();
fileObject.setName(file.getName());
fileObject.setSize(file.length());
fileObject.setLastModified(file.lastModified());
fileObjects.add(fileObject);
}
writeToFile(fileObjects);
System.out.println("文件信息已记录到文件中。");
} else {
System.out.println("文件夹不存在或不是文件夹。");
}
}
private static void writeToFile(List<FileObject> fileObjects) {
try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("file_info.dat"))) {
outputStream.writeObject(fileObjects);
} catch (IOException e) {
System.out.println("写入文件异常:" + e.getMessage());
}
}
private static List<FileObject> readFromFile() {
List<FileObject> fileObjects = new ArrayList<>();
try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("file_info.dat"))) {
Object object = inputStream.readObject();
if (object instanceof List) {
List<?> list = (List<?>) object;
for (Object item : list) {
if (item instanceof FileObject) {
fileObjects.add((FileObject) item);
}
}
}
} catch (IOException | ClassNotFoundException e) {
System.out.println("读取文件异常:" + e.getMessage());
}
return fileObjects;
}
private static void compare(List<FileObject> before, List<FileObject> after) {
System.out.println("比较结果:");
for (FileObject beforeFile : before) {
FileObject afterFile = after.stream().filter(f -> f.getName().equals(beforeFile.getName())).findFirst().orElse(null);
if (afterFile == null) {
System.out.printf("%s\t已删除\n", beforeFile.getName());
} else if (beforeFile.getLastModified() != afterFile.getLastModified()) {
System.out.printf("%s\t修改时间有变化\n", beforeFile.getName());
} else if (beforeFile.getSize() != afterFile.getSize()) {
System.out.printf("%s\t大小有变化\n", beforeFile.getName());
}
}
for (FileObject afterFile : after) {
FileObject beforeFile = before.stream().filter(f -> f.getName().equals(afterFile.getName())).findFirst().orElse(null);
if (beforeFile == null) {
System.out.printf("%s\t新增\n", afterFile.getName());
}
}
}
private static class FileObject implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private long size;
private long lastModified;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public long getLastModified() {
return lastModified;
}
public void setLastModified(long lastModified) {
this.lastModified = lastModified;
}
}
}
```
该程序首先要求用户输入一个文件夹路径,然后使用File类的listFiles方法获取该文件夹下的所有文件,将每个文件的信息封装到一个FileObject对象中,最后将所有FileObject对象写入到一个二进制文件中。如果文件夹不存在或不是文件夹,则输出错误信息。
在比较文件夹实际状况和记录在文件中的状况时,可以将之前记录在文件中的FileObject对象读取出来,与当前的文件夹状况进行比较。比较过程中,首先找到文件夹中已经删除的文件,然后找到文件夹中修改了修改时间或大小的文件,最后找到文件夹中新增的文件。比较结果输出到控制台。
需要注意的是,该程序只比较了文件的基本信息,不包括文件内容的比较。如果需要比较文件内容,请使用相应的工具或算法。
阅读全文