gpt4 book ai didi

java - 将文件合并成一个新的大文件,直到用户id的数量达到1000万

转载 作者:行者123 更新时间:2023-12-01 14:25:30 25 4
gpt4 key购买 nike

我的文件夹中有大约 100 个文件。每个文件都会有这样的数据,每一行都类似于一个用户 ID。

960904056
6624084
1096552020
750160020
1776024
211592064
1044872088
166720020
1098616092
551384052
113184096
136704072

我正在尝试继续将该文件夹中的文件合并到一个新的大文件中,直到该新大文件中的用户 ID 总数达到 1000 万。

我能够读取特定文件夹中的所有文件,然后继续将这些文件中的用户 ID 添加到 linkedhashset 中。然后我想看看哈希集的大小是否为 1000 万,如果是 1000 万,则将所有这些用户 id 写入一个新的文本文件。这是可行的解决方案吗?

这 1000 万个数字应该是可配置的。将来如果我需要改变那1000万1o 5000万那么我应该能够做到这一点。

下面是我到目前为止的代码

public static void main(String args[]) {

File folder = new File("C:\\userids-20130501");
File[] listOfFiles = folder.listFiles();

Set<String> userIdSet = new LinkedHashSet<String>();
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
if (file.isFile() && file.getName().endsWith(".txt")) {
try {
List<String> content = FileUtils.readLines(file, Charset.forName("UTF-8"));
userIdSet.addAll(content);
if(userIdSet.size() >= 10Million) {
break;
}
System.out.println(userIdSet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

对此有任何帮助吗?还有更好的方法来完成相同的过程吗?

最佳答案

从我们离开的地方继续。 ;)

您可以使用 FileUtils 以及 writeLines() 方法来写入文件。

试试这个 -

public static void main(String args[]) {

File folder = new File("C:\\userids-20130501");

Set<String> userIdSet = new LinkedHashSet<String>();
int count = 1;
for (File file : folder.listFiles()) {
if (file.isFile() && file.getName().endsWith(".txt")) {
try {
List<String> content = FileUtils.readLines(file, Charset.forName("UTF-8"));
userIdSet.addAll(content);
if(userIdSet.size() >= 10Million) {
File bigFile = new File("<path>" + count + ".txt");
FileUtils.writeLines(bigFile, userIdSet);
count++;
userIdSet = new LinkedHashSet<String>();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

如果将数据保存在LinkedHashSet中的目的只是为了将其再次写入另一个文件,那么我有另一个解决方案。

编辑以避免内存不足异常

public static void main(String args[]) {
File folder = new File("C:\\userids-20130501");

int fileNameCount = 1;
int contentCounter = 1;
File bigFile = new File("<path>" + fileNameCount + ".txt");
boolean isFileRequired = true;
for (File file : folder.listFiles()) {
if (file.isFile() && file.getName().endsWith(".txt")) {
try {
List<String> content = FileUtils.readLines(file, Charset.forName("UTF-8"));
contentCounter += content.size();
if(contentCounter < 10Million) {
FileUtils.writeLines(bigFile, content, true);
} else {
fileNameCount++;
bigFile = new File("<path>" + fileNameCount + ".txt");
FileUtils.writeLines(bigFile, content);
contentCounter = 1;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

关于java - 将文件合并成一个新的大文件,直到用户id的数量达到1000万,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17200945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com