我在100 files in a folder
附近。我正在尝试阅读所有这些文件one by one
。每个文件都有这样的数据,每行都类似于用户ID。
960904056
6624084
1096552020
750160020
1776024
211592064
1044872088
166720020
1098616092
551384052
113184096
136704072
所以我需要逐行读取该文件,然后将每个用户ID存储在LinkedHashSet
中。我可以使用以下代码读取特定文件夹中的所有文件。但是使用我编写的下面的java代码,我不知道如何逐行读取这些文件,然后将每个用户ID存储在LinkedHashSet
中?
public static void main(String args[]) {
File folder = new File("C:\\userids-20130501");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
File file = listOfFiles[i];
if (file.isFile() && file.getName().endsWith(".txt")) {
try {
String content = FileUtils.readFileToString(file);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
对此有何帮助?还有更好的方法来做同样的过程吗?
答案 0 :(得分:3)
由于您使用的是FileUtils
。该类具有方法readLines()
,该方法返回String
的列表。
然后,您可以使用List
方法将此LinkedHashSet
字符串添加到addAll()
。
试试这个 -
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);
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:1)
您可以使用readLine()
的{{1}}方法逐行读取文件,如下所示:
BufferedReader
答案 2 :(得分:1)
如果我理解正确,那么你可以做下面的事情。
// Change generic if you want Integer
Set<String> userIdSet = new LinkedHashSet<String>();
// Your code
String content = FileUtils.readFileToString(file);
// Creating array by splitting for every new line content
String[] stn = content.split("\\n");
for(String xx : stn){
// parse it as Integer if you changed the generic
// Adding the file content to Set
userIdSet.add(xx);
}
答案 3 :(得分:1)
以下是我会做的不同的事情。
使用文件的迭代器
新的try语句允许在try块中打开“资源”,并在块完成时自动关闭资源。 Ref
使用continue
语句排除无效文件。这将删除一个级别的嵌套。 See this post.
所有这些变化当然都是高度自以为是。
public static void main(String[] args) {
Set<Integer> users = new LinkedHashSet<Integer>();
File dir = new File("C:\\userids-20130501");
for (File child : dir.listFiles()) {
if (!child.isFile() || !child.getName().endsWith(".txt")) {
continue;
}
try (BufferedReader in = new BufferedReader(
new FileReader(child.getPath()))) {
String id = null;
while ((id = in.readLine()) != null) {
users.add(Integer.parseInt(id));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}