Wie liest man alle Dateien in einem Ordner aus Java?


Answers

File folder = new File("/Users/you/folder/");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}
Question

Wie liest man alle Dateien in einem Ordner über Java?




Alle Antworten zu diesem Thema, die die neuen Java 8-Funktionen verwenden, vernachlässigen das Schließen des Streams. Das Beispiel in der akzeptierten Antwort sollte lauten:

try (Stream<Path> filePathStream=Files.walk(Paths.get("/home/you/Desktop"))) {
    filePathStream.forEach(filePath -> {
        if (Files.isRegularFile(filePath)) {
            System.out.println(filePath);
        }
    });
}

Aus dem Files.walk der Files.walk Methode:

Der zurückgegebene Stream kapselt einen oder mehrere DirectoryStreams. Wenn eine rechtzeitige Entsorgung von Dateisystemressourcen erforderlich ist, sollte das try-with-resources-Konstrukt verwendet werden, um sicherzustellen, dass die Close-Methode des Streams nach Abschluss der Streamvorgänge aufgerufen wird.




private static final String ROOT_FILE_PATH="/";
File f=new File(ROOT_FILE_PATH);
File[] allSubFiles=f.listFiles();
for (File file : allSubFiles) {
    if(file.isDirectory())
    {
        System.out.println(file.getAbsolutePath()+" is directory");
        //Steps for directory
    }
    else
    {
        System.out.println(file.getAbsolutePath()+" is file");
        //steps for files
    }
}



Durchlaufen Sie einfach alle Dateien mit Files.walkFileTree (Java 7)

Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        System.out.println("file: " + file);
        return FileVisitResult.CONTINUE;
    }
});



nette Verwendung von java.io.FileFilter wie auf https://.com/a/286001/146745 gesehen

File fl = new File(dir);
File[] files = fl.listFiles(new FileFilter() {          
    public boolean accept(File file) {
        return file.isFile();
    }
});



Ich denke, das ist ein guter Weg, um alle Dateien in einem Ordner und Unterordner zu lesen

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())
            {
                files.add(path.get(i));
            }
        }
    }
    if(input.isFile())
    {
        files.add(input);
    }
}



File directory = new File("/user/folder");      
File[] myarray;  
myarray=new File[10];
myarray=directory.listFiles();
for (int j = 0; j < myarray.length; j++)
{
       File path=myarray[j];
       FileReader fr = new FileReader(path);
       BufferedReader br = new BufferedReader(fr);
       String s = "";
       while (br.ready()) {
          s += br.readLine() + "\n";
       }
}



import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class AvoidNullExp {

public static void main(String[] args) {

    List<File> fileList =new ArrayList<>();
     final File folder = new File("g:/master");
     new AvoidNullExp().listFilesForFolder(folder, fileList);
}

    public void listFilesForFolder(final File folder,List<File> fileList) {
        File[] filesInFolder = folder.listFiles();
        if (filesInFolder != null) {
            for (final File fileEntry : filesInFolder) {
                if (fileEntry.isDirectory()) {
                    System.out.println("DIR : "+fileEntry.getName());
                listFilesForFolder(fileEntry,fileList);
            } else {
                System.out.println("FILE : "+fileEntry.getName());
                fileList.add(fileEntry);
            }
         }
        }
     }


}



/**
 * Function to read all mp3 files from sdcard and store the details in an
 * ArrayList
 */


public ArrayList<HashMap<String, String>> getPlayList() 
    {
        ArrayList<HashMap<String, String>> songsList=new ArrayList<>();
        File home = new File(MEDIA_PATH);

        if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<String, String> song = new HashMap<String, String>();
                song.put(
                        "songTitle",
                        file.getName().substring(0,
                                (file.getName().length() - 4)));
                song.put("songPath", file.getPath());

                // Adding each song to SongList
                songsList.add(song);
            }
        }
        // return songs list array
        return songsList;
    }

    /**
     * Class to filter files which have a .mp3 extension
     * */
    class FileExtensionFilter implements FilenameFilter 
    {
        @Override
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP3"));
        }
    }

Sie können Textdateien oder andere Erweiterungen filtern .. ersetzen Sie es einfach durch .MP3




Während ich mit Rich, Orian und dem Rest einverstanden bin:

    final File keysFileFolder = new File(<path>); 
    File[] fileslist = keysFileFolder.listFiles();

    if(fileslist != null)
    {
        //Do your thing here...
    }

Aus irgendeinem Grund verwenden alle hier verwendeten Beispiele den absoluten Pfad (dh den ganzen Weg von root oder, sagen wir, Laufwerksbuchstaben (C: \) für Windows ..)

Ich möchte hinzufügen, dass es möglich ist, den relativen Pfad als-auch zu verwenden. Also, wenn Sie pwd (aktuelles Verzeichnis / Ordner) sind Ordner1 und Sie Ordner1 / Unterordner analysieren möchten, schreiben Sie einfach (in den Code oben statt):

    final File keysFileFolder = new File("subfolder");



Um die akzeptierte Antwort zu erweitern, speichere ich die Dateinamen in eine ArrayList (anstatt sie einfach in System.out.println zu speichern). Ich habe eine Hilfsklasse "MyFileUtils" erstellt, damit sie von anderen Projekten importiert werden kann:

class MyFileUtils {
    public static void loadFilesForFolder(final File folder, List<String> fileList){
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                loadFilesForFolder(fileEntry, fileList);
            } else {
                fileList.add( fileEntry.getParent() + File.separator + fileEntry.getName() );
            }
        }
    }
}

Ich habe den vollständigen Pfad zum Dateinamen hinzugefügt. Sie würden es so verwenden:

import MyFileUtils;

List<String> fileList = new ArrayList<String>();
final File folder = new File("/home/you/Desktop");
MyFileUtils.loadFilesForFolder(folder, fileList);

// Dump file list values
for (String fileName : fileList){
    System.out.println(fileName);
}

Die ArrayList wird an "value" übergeben, aber der Wert wird verwendet, um auf das gleiche ArrayList-Objekt zu verweisen, das im JVM-Heap vorhanden ist. Auf diese Weise fügt jeder Rekursionsaufruf Dateinamen zur selben ArrayList hinzu (wir erzeugen KEINE neue ArrayList bei jedem rekursiven Aufruf).




um Nullpunkterexceptions in der Funktion listFiles () zu verhindern und rekursiv alle Dateien aus Unterverzeichnissen zu holen.

 public void listFilesForFolder(final File folder,List<File> fileList) {
    File[] filesInFolder = folder.listFiles();
    if (filesInFolder != null) {
        for (final File fileEntry : filesInFolder) {
            if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry,fileList);
        } else {
            fileList.add(fileEntry);
        }
     }
    }
 }

 List<File> fileList = new List<File>();
 final File folder = new File("/home/you/Desktop");
 listFilesForFolder(folder);