读取文件夹中的文件,然后将每个用户ID存储在linkedhashset中

时间:2013-06-19 18:44:12

标签: java linkedhashset

我在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();
            }
        }
    }
}

对此有何帮助?还有更好的方法来做同样的过程吗?

4 个答案:

答案 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();
         }
       }
   }