如何使用TreeMap缓存我正在从目录中的文本文件集中读取的数据?目前,我的程序从目录中的多个文本文件中读取数据,并将该信息保存在名为output.txt的文本文件中。我想缓存这些数据,以便以后使用它。我怎么能用TreeMap类做到这一点? 这些是键,值:TreeMap 我想要缓存的数据是(文件的日期,文件的时间,当前时间)。
以下是.text中包含的数据示例。文件。
和 是 如 在 奖 奖项 是 但 通过 centsales 对于 他 你好 她的 她的 他的 如果 在 到 是 它 我 矿 没有 不 的 上 要么 小号 这样 Ť 那 该 其 他们 然后 那里 这些 他们 这个 至 是 将 同 您 您的 你的 一个”- ä»-A»¬ ä½ ä½ä»¬ æ“ æ'们 一个 一个 和 是 如 在 是 但 通过 对于 如果 在 到 是 它 没有 不
import java.io.*;
public class CacheData {
public static void main(String[] args) throws IOException {
String target_dir = "C:\\Files";
String output = "C:\\files\\output.txt";
File dir = new File(target_dir);
File[] files = dir.listFiles();
// open the Printwriter before your loop
PrintWriter outputStream = new PrintWriter(output);
for (File textfiles : files) {
if (textfiles.isFile() && textfiles.getName().endsWith(".txt")) {
BufferedReader inputStream = null;
// close the outputstream after the loop
outputStream.close();
try {
inputStream = new BufferedReader(new FileReader(textfiles));
String line;
;
while ((line = inputStream.readLine()) != null) {
System.out.println(line);
// Write Content
outputStream.println(line);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
}
}
}
答案 0 :(得分:0)
如果要分隔每个文件的行,可以执行以下操作:
Map<String, List<String>> filesAndContents = new TreeMap<>();
for (File textfiles : files) {
if (textfiles.isFile() && textfiles.getName().endsWith(".txt")) {
List<String> lines = new ArrayList<>();
filesAndContents.put(textfiles.getName(), lines);
BufferedReader inputStream = null;
// close the outputstream after the loop
outputStream.close();
try {
inputStream = new BufferedReader(new FileReader(textfiles));
String line;
while ((line = inputStream.readLine()) != null) {
System.out.println(line);
// Write Content
outputStream.println(line);
lines.add(line);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
}
此处,filesAndContents
会将文件名映射到内容行(按阅读顺序)。由于使用了TreeMap
,因此地图中的条目将按文件名的自然排序进行排序(即按字母顺序排列)。
根据您的评论,您似乎只想将文件元数据存储在缓存中。如果您使用的是Java 7/8,则可以从BasicFileAttributes
获取此信息:
Map<String, BasicFileAttributes> filesAndMetadata = new TreeMap<>();
for (File textfiles : files) {
if (textfiles.isFile() && textfiles.getName().endsWith(".txt")) {
filesAndMetadata.put(textfiles.getName(),
Files.readAttributes(textFiles.toPath(),
BasicFileAttributes.class));
// ....
如果您还需要文件的所有者,可以通过FileOwnerAttributeView
这样获得:
FileOwnerAttributeView ownerAttributeView = Files.getFileAttributeView(
textFiles.toPath(),
FileOwnerAttributeView.class);
您也可以考虑创建自己的包装类,以保存缓存所需的所有元数据。