web-dev-qa-db-fra.com

Java - Lire tous les fichiers .txt du dossier

Disons que j'ai un dossier appelé maps et à l'intérieur de maps j'ai map1.txt, map2.txt, et map3.txt. Comment utiliser Java et la variable BufferReader pour lire tous les fichiers .txt du dossier maps (si possible)?

19
nn2

Quelque chose comme ce qui suit devrait vous aider, notez que j'utilise FileUtils commun à Apache au lieu de jouer avec les tampons et les flux pour plus de simplicité ...

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 */
  } 
}
45
Andrew White

Je voudrais prendre @Andrew White answer (+1 BTW) un peu plus loin et suggérer d'utiliser FileNameFilter pour répertorier uniquement les fichiers pertinents:

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
}
22
MByD
    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
Lokesh

Je pense que c'est un bon moyen de lire tous les fichiers .txt à partir de cartes et de sous-dossiers

 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
Mohammad

Si vous voulez une meilleure façon de faire cela en utilisant la nouvelle API Java.nio, alors voici le chemin emprunté de les documents Java

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
Shervin Asgari

En utilisant uniquement JDK, si tous vos fichiers sont dans un répertoire:

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

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

Pour exclure des fichiers, vous pouvez utiliser listFiles(FileFilter)

0
Duy Đặng