Java - 读取文件夹中的所有 .txt 文件

Posted

技术标签:

【中文标题】Java - 读取文件夹中的所有 .txt 文件【英文标题】:Java - Read all .txt files in folder 【发布时间】:2011-08-20 22:06:57 【问题描述】:

假设我有一个名为maps 的文件夹,在maps 里面有map1.txtmap2.txt,map3.txt。如何使用 Java 和 BufferReader 读取文件夹 maps 中的所有 .txt 文件(如果可能的话)?

【问题讨论】:

Read all files in a folder的可能重复 【参考方案1】:

类似下面的内容应该可以帮助您进行操作,请注意,为了简单起见,我使用 apache commons FileUtils 而不是弄乱缓冲区和流...

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 */
   

【讨论】:

啊。谢谢...但请注意:如果所有文件都命名为 mapNUMBER.txt,是否会更容易管理?如map3.txt、map4.txt等 此代码无法按原样工作,因为第 6 行使用的变量 'file' 没有声明。不知道为什么要这样写,也许它应该是更多的伪代码风格, 但 file 应该替换为 listOfFiles[i],或者如果要使用 file 变量应该声明它。 只是为了记录,for(File file : folder.listFiles()) 更短更漂亮。 :) @Dolda2000 同意,我不确定我为什么要这样回答。也许我拉了一个现有的例子。【参考方案2】:

我会采取@Andrew White 的回答(+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

【讨论】:

@Shahryar 这不是一个多余的答案,而是一个不同且有效的答案。 @KennyCason 正如我所见,这就像以前的答案一样!使用 FileNameFilter 有什么好处? @Shahryar 是的,这是 imo 一个平等的,可能是一个更干净的例子。知道other 解决方案的存在也很好。您会在 SO 上看到有许多相似但不同的解决方案可以解决问题。 @KennyCason “知道其他解决方案的存在也很好”好话:-)【参考方案3】:
    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);

【讨论】:

这对其他答案有什么改进吗?还是 for-each 只是一种语法偏好? 它做的一样,唯一的区别是它干净而且代码更少。【参考方案4】:

使用NIO,您可以执行以下操作:

Files.walk(Paths.get("/path/to/files"))
          .filter(Files::isRegularFile)
          .filter(path -> path.getFileName().toString().endsWith(".txt"))
          .map(FileUtils::readFileToString)
          // do something

要读取文件内容,您可以使用 Files#readString,但像往常一样,您需要在 lambda 表达式中处理 IOException

【讨论】:

try/catch包围?【参考方案5】:

我认为这是从地图和子文件夹中读取所有 .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);
            
        
    


【讨论】:

【参考方案6】:

如果您想使用新的 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);

【讨论】:

【参考方案7】:

仅使用 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)

【讨论】:

以上是关于Java - 读取文件夹中的所有 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

java 读取txt文件 想自定义从第几个字节开始读和读几个字节 怎么做??

求高手点拨:一个Java的“IO读取txt文件中的数据”的问题.

Java 学习笔记 - IO篇:读写文本文件txt

Java中的小问题:读出file1.txt的内容,输出到标准设备,验证写入的内容。

java读txt方法

java读取TXT文件 我把10万个数字存在了TXT文件中以空格分隔 我想读出来该怎么办(用java )