用java实现五、 从命令行输入一个带路径的文件夹地址信息 1. 列出该文件夹下所有文件。 2. 将所有文件的info信息(包括:文件名、大小、最后修改时间等)按对象形式记录到文件中。 3. 用实际文件状况(截屏资源管理器)与记录在文件中的状况比较,检查实际文件是否变化
时间: 2024-02-03 07:11:28 浏览: 85
以下是用Java实现的代码,实现了上述三个功能。
1. 列出该文件夹下所有文件。
```
import java.io.*;
public class ListFiles {
public static void main(String[] args) {
if(args.length == 0) {
System.out.println("请输入文件夹路径。");
return;
}
String folderPath = args[0];
File folder = new File(folderPath);
if(!folder.isDirectory()) {
System.out.println(folderPath + " 不是一个文件夹。");
return;
}
File[] files = folder.listFiles();
for(File file : files) {
if(file.isFile()) {
System.out.println(file.getName());
}
}
}
}
```
2. 将所有文件的info信息(包括:文件名、大小、最后修改时间等)按对象形式记录到文件中。
```
import java.io.*;
import java.util.*;
class FileInfo implements Serializable {
private String name;
private long size;
private long lastModified;
public FileInfo(String name, long size, long lastModified) {
this.name = name;
this.size = size;
this.lastModified = lastModified;
}
public String getName() {
return name;
}
public long getSize() {
return size;
}
public long getLastModified() {
return lastModified;
}
public String toString() {
return name + "\t" + size + "\t" + lastModified;
}
}
public class RecordInfo {
public static void main(String[] args) {
if(args.length == 0) {
System.out.println("请输入文件夹路径。");
return;
}
String folderPath = args[0];
File folder = new File(folderPath);
if(!folder.isDirectory()) {
System.out.println(folderPath + " 不是一个文件夹。");
return;
}
File[] files = folder.listFiles();
List<FileInfo> fileInfos = new ArrayList<>();
for(File file : files) {
if(file.isFile()) {
String name = file.getName();
long size = file.length();
long lastModified = file.lastModified();
fileInfos.add(new FileInfo(name, size, lastModified));
}
}
try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("fileInfo.obj"))) {
oos.writeObject(fileInfos);
System.out.println("文件信息已经记录到 fileInfo.obj 文件中。");
} catch(IOException e) {
e.printStackTrace();
}
}
}
```
3. 用实际文件状况(截屏资源管理器)与记录在文件中的状况比较,检查实际文件是否变化。
```
import java.io.*;
import java.util.*;
class FileInfo implements Serializable {
private String name;
private long size;
private long lastModified;
public FileInfo(String name, long size, long lastModified) {
this.name = name;
this.size = size;
this.lastModified = lastModified;
}
public String getName() {
return name;
}
public long getSize() {
return size;
}
public long getLastModified() {
return lastModified;
}
public String toString() {
return name + "\t" + size + "\t" + lastModified;
}
}
public class CheckChanges {
public static void main(String[] args) {
if(args.length == 0) {
System.out.println("请输入文件夹路径。");
return;
}
String folderPath = args[0];
File folder = new File(folderPath);
if(!folder.isDirectory()) {
System.out.println(folderPath + " 不是一个文件夹。");
return;
}
File[] files = folder.listFiles();
List<FileInfo> oldFileInfos = null;
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("fileInfo.obj"))) {
oldFileInfos = (List<FileInfo>)ois.readObject();
} catch(IOException | ClassNotFoundException e) {
e.printStackTrace();
}
if(oldFileInfos == null) {
System.out.println("找不到之前记录的文件信息,请重新记录。");
return;
}
List<FileInfo> newFileInfos = new ArrayList<>();
for(File file : files) {
if(file.isFile()) {
String name = file.getName();
long size = file.length();
long lastModified = file.lastModified();
newFileInfos.add(new FileInfo(name, size, lastModified));
}
}
boolean unchanged = true;
if(oldFileInfos.size() != newFileInfos.size()) {
unchanged = false;
} else {
for(int i = 0; i < oldFileInfos.size(); i++) {
FileInfo oldFileInfo = oldFileInfos.get(i);
FileInfo newFileInfo = newFileInfos.get(i);
if(!oldFileInfo.getName().equals(newFileInfo.getName())) {
unchanged = false;
break;
}
if(oldFileInfo.getSize() != newFileInfo.getSize()) {
unchanged = false;
break;
}
if(oldFileInfo.getLastModified() != newFileInfo.getLastModified()) {
unchanged = false;
break;
}
}
}
if(!unchanged) {
System.out.println("文件发生了变化。");
} else {
System.out.println("文件没有发生变化。");
}
}
}
```
阅读全文