Java - 读取文件夹中的多个txt文件并对其进行处理

8
我按照这个问题的步骤操作:
在我的情况下,我有720个文件,文件名如下:“dom 24 mar 2013_00.50.35_128.txt”,每个文件都有不同的日期和时间。 在测试阶段,我使用Scanner,对特定的txt文件进行一些操作:

Scanner s = new Scanner(new File("stuff.txt"));

我的问题是:
如何重用scanner并读取所有720个文件,而不必在scanner上设置精确名称?
谢谢

请参见此处:https://dev59.com/8HVC5IYBdhLWcg3wxEJ1 - sotix
你能否只读取目录中的所有文件,或者目录中还有其他命名方案不同的文件,你不想读取它们吗? - Kevin DiTraglia
1
你不能这样做。每个文件都需要创建一个新的扫描器。 - William Morrison
4个回答

16

假设您已经将所有文件放在同一个地方:

File dir = new File("path/to/files/");

for (File file : dir.listFiles()) {
    Scanner s = new Scanner(file);
    ...
    s.close();
}

请注意,如果您有任何不想包含的文件,您可以给listFiles()函数提供一个FileFilter参数来过滤它们。


是的,所有文件都在同一个文件夹中。 - alessandrob
2
真是太厉害了,你刚好比我先做到了这件事 :) 因为你提前回答了,我给你点赞。 - hax0r_n_code
如果文件位于不同的目录中,我们如何读取多个文件? - Suleman khan

8
是的,通过将文件对象指向一个目录并列出该目录下的文件来创建您的文件对象。
File dir = new File("Dir/ToYour/Files");

if(dir.isDir()) {
   for(File file : dir.listFiles()) {
      if(file.isFile()) {
         //do stuff on a file
      }
   }
} else {
   //do stuff on a file
}

3
你可以尝试这样做。
 File folder = new File("D:\\DestFile");
 File[] listOfFiles = folder.listFiles();

 for (File file : listOfFiles) {
 if (file.isFile()&&(file.getName().substring(file.getName().lastIndexOf('.')+1).equals("txt"))) {
   // Scanner 
  }
 }

1
    File file = new File(folderNameFromWhereToRead);

    if(file!=null && file.exists()){
        File[] listOfFiles = file.listFiles();

        if(listOfFiles!=null){

            for (int i = 0; i < listOfFiles.length; i++) {
                if (listOfFiles[i].isFile()) {
                      // DO work
                }
            }
        }
    }

我不是专家,但我认为你的 if(listOfFiles!=null) 是不必要的。你刚刚创建了 listOfFiles,它怎么可能是 null 呢? - hax0r_n_code
哎呀..你的if(file!=null)也是一样...你在测试一个对象引用是否存在,而你刚刚在测试之前才创建了它! - hax0r_n_code
lisOfFiles 进行空值检查是可以的(如果路径存在但是是一个文件,这种情况可能会发生),但是对 file 的空值检查并不是必须的。无论如何,进行 isFile() 检查是值得加分的。 - Ravi K Thapliyal
@RaviThapliyal 好主意,我没有考虑到listOfFiles的情况,因为我会先检查file是否是目录,然后再处理listFiles() - hax0r_n_code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接