2011-05-07 63 views
19

比方说,我有一个文件夹,名为maps和内部maps我有map1.txtmap2.txt,map3.txt。如何使用Java和BufferReader来读取文件夹maps中的所有.txt文件(如果可以的话)?爪哇 - 阅读所有.txt文件夹中

+0

的[阅读AF的所有文件可能的复制旧](http://stackoverflow.com/questions/1844688/read-all-files-in-a-folder) – jsroyal 2017-01-16 17:30:37

回答

44

类似下面应该让你去,请注意,我用的,而不是与缓冲器搞乱阿帕奇百科全书文件实用程序和简化流...

File folder = new File("/path/to/files"); 
File[] listOfFiles = folder.listFiles(); 

for (int i = 0; i < listOfFiles.length; i++) { 
    File file = listOfFiles[i]; 
    if (file.isFile() && file.getName().endsWith(".txt")) { 
    String content = FileUtils.readFileToString(file); 
    /* do somthing with content */ 
    } 
} 
+0

啊。谢谢......但是一个注释:如果所有文件都被命名为mapNUMBER.txt,它会更容易管理吗?如map3.txt,map4.txt等 – nn2 2011-05-07 22:17:49

+0

这段代码不会按原样工作,因为没有在第6行使用变量'file'的声明。不知道为什么你会这样写它,也许它应该是更具伪代码风格,但文件应该用listOfFiles [i]替换,或者文件变量应该在将要使用时声明。 – paul 2013-01-31 16:47:23

+1

@paul你是对的,现在就偷看吧...... – 2013-01-31 17:26:02

22

我会采取@Andrew白色答案(+1 BTW )更进一步,并建议你使用FilenameFilter仅列出相关的文件:

FilenameFilter filter = new FilenameFilter() { 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".txt"); 
    } 
}; 

File folder = new File("/path/to/files"); 
File[] listOfFiles = folder.listFiles(filter); 

for (int i = 0; i < listOfFiles.length; i++) { 
    File file = listOfFiles[i]; 
    String content = FileUtils.readFileToString(file); 
    // do something with the file 
} 
+0

冗余答案! – Shahryar 2013-05-06 04:54:45

+0

@Shahryar这不是一个多余的答案,它是一个不同的和有效的答案。 – 2013-06-05 18:46:05

+1

@KennyCason当我看到它就像以前的答案!使用FileNameFilter的优点是什么? – Shahryar 2013-06-07 19:15:38

4
final File folder = new File("C:/Dev Tools/apache-tomcat-6.0.37/webapps/ROOT/somefile"); 
    for (final File fileEntry : folder.listFiles()) { 
      System.out.println("FileEntry Directory "+fileEntry); 
+1

这是否增加了其他答案的任何改进?或者是for-每个只是语法首选项? – 2014-09-30 18:14:00

+1

它的确如此,唯一的区别是它干净,代码少。 – Lokesh 2014-09-30 18:16:03

0

我认为这是从地图读取所有.txt文件和好方法子文件夹的

private static void addfiles (File input,ArrayList<File> files) 
{ 
    if(input.isDirectory()) 
    { 
     ArrayList <File> path = new ArrayList<File>(Arrays.asList(input.listFiles())); 
     for(int i=0 ; i<path.size();++i) 
     { 
      if(path.get(i).isDirectory()) 
      { 
       addfiles(path.get(i),files); 
      } 
      if(path.get(i).isFile()) 
      { 
       String name=(path.get(i)).getName(); 
       if(name.lastIndexOf('.')>0) 
       { 
        int lastIndex = name.lastIndexOf('.'); 
        String str = name.substring(lastIndex); 
        if(str.equals(".txt")) 
        { 
         files.add(path.get(i)); 
        } 
       } 
      } 
     } 
    } 
    if(input.isFile()) 
    { 
     String name=(input.getName()); 
     if(name.lastIndexOf('.')>0) 
     { 
      int lastIndex = name.lastIndexOf('.'); 
      String str = name.substring(lastIndex); 
      if(str.equals(".txt")) 
      { 
       files.add(input); 
      } 
     } 
    } 

} 
0

如果你想这样做,使用新的java.nio API的一个更好的方法,那么这个是这样的,从the java docs

Path dir = ...; 
try (DirectoryStream<Path> stream = 
    Files.newDirectoryStream(dir, "*.txt")) { 
    for (Path entry: stream) { 
     System.out.println(entry.getFileName()); 
    } 
} catch (IOException x) { 
    // IOException can never be thrown by the iteration. 
    // In this snippet, it can // only be thrown by newDirectoryStream. 
    System.err.println(x); 
} 
0

仅使用JDK,如果您的所有文件都在采取一个目录:

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

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

要排除的文件,您可以使用listFiles(FileFilter)