java1.8标准下 扫描指定路径及其子文件夹下的所有文件,将文件的完整路径、文件大小信息以JSON数据的格式写入到用户指定路径下的txt文件中,并统计文件总数、占用空间总量和执行时间
时间: 2024-05-09 20:18:29 浏览: 91
能够对文件夹,代码文件进行行数统计
回答:
您好,可以使用Java的递归函数扫描指定路径及其子文件夹下的所有文件,再使用JSON库将数据封装为JSON格式,最后写入到用户指定路径下的txt文件。以下是代码示例:
```java
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.time.*;
import java.util.*;
import com.google.gson.*;
public class FileScanner {
public static void main(String[] args) throws IOException {
// 用户指定扫描路径和结果文件路径
String scanPath = "C:/Users/user/Desktop/test";
String resultFile = "C:/Users/user/Desktop/result.txt";
Instant start = Instant.now(); // 程序开始时间
List<FileData> fileDataList = new ArrayList<>(); // 用于存放文件数据
File dir = new File(scanPath); // 指定扫描路径
scanFiles(dir, fileDataList); // 扫描文件
Gson gson = new GsonBuilder().setPrettyPrinting().create(); // 用于将数据转换为JSON格式
String jsonData = gson.toJson(fileDataList); // 将数据转换为JSON格式
try (BufferedWriter writer = new BufferedWriter(new FileWriter(resultFile))) {
writer.write(jsonData); // 将数据写入结果文件
}
Instant end = Instant.now(); // 程序结束时间
Duration duration = Duration.between(start, end); // 计算执行时间
System.out.printf("扫描完成,共扫描到%d个文件,占用空间总量为%d字节,执行时间为%s\n", fileDataList.size(),
getTotalSize(fileDataList), duration);
}
private static void scanFiles(File dir, List<FileData> fileDataList) throws IOException {
if (dir.isFile()) {
BasicFileAttributes attrs = Files.readAttributes(dir.toPath(), BasicFileAttributes.class);
fileDataList.add(new FileData(dir.getAbsolutePath(), attrs.size()));
} else if (dir.isDirectory()) {
File[] files = dir.listFiles();
for (File file : files) {
scanFiles(file, fileDataList); // 递归扫描子文件夹
}
}
}
private static long getTotalSize(List<FileData> fileDataList) {
long totalSize = 0;
for (FileData fileData : fileDataList) {
totalSize += fileData.size;
}
return totalSize;
}
private static class FileData {
String path;
long size;
public FileData(String path, long size) {
this.path = path;
this.size = size;
}
}
}
```
程序输出类似如下的结果:
```
扫描完成,共扫描到5个文件,占用空间总量为129字节,执行时间为PT0.002S
```
注意事项:
1. 程序会从指定路径开始递归扫描所有文件和文件夹,因此请确定指定路径的安全性,并避免扫描整个硬盘。
2. 为了将数据封装为JSON格式,代码中使用了Google Gson库,因此需要将以下依赖项添加到项目的`pom.xml`或`build.gradle`中:
```xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
```
阅读全文