Подтвердить что ты не робот

Java - чтение всех файлов .txt в папке

Скажем, у меня есть папка с именем maps и внутри maps У меня есть map1.txt, map2.txt, и map3.txt. Как я могу использовать Java и BufferReader для чтения всех файлов .txt в папке maps (если это вообще возможно)?

4b9b3361

Ответ 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 */
  } 
}

Ответ 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
}

Ответ 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);

Ответ 4

Я думаю, что это хороший способ прочитать все .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);
            }
        }
    }

}

Ответ 5

Если вам нужен лучший способ сделать это, используя новый java.nio api, то это способ, взятый из 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);
}

Ответ 6

Использование только 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)

Ответ 7

С помощью 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, но, как обычно, вам нужно обработать IOException внутри лямбда-выражения.