Wie kann ich alle Dateien in einem Ordner mit Java lesen? Es spielt keine Rolle, welche API.
Antworten
Zu viele Anzeigen?Schöne Verwendung von java.io.FileFilter
wie gesehen bei https://stackoverflow.com/a/286001/146745
File fl = new File(dir);
File[] files = fl.listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isFile();
}
});
Ich stimme zwar mit Rich, Orian und den anderen für die Verwendung von:
final File keysFileFolder = new File(<path>);
File[] fileslist = keysFileFolder.listFiles();
if(fileslist != null)
{
//Do your thing here...
}
Aus irgendeinem Grund verwenden alle Beispiele hier absolut Pfad (d.h. den ganzen Weg von Root, oder, sagen wir, Laufwerksbuchstabe (C:\) für Windows..)
Ich möchte hinzufügen, dass es möglich ist, Folgendes zu verwenden relativ Pfad ebenfalls. Wenn also Ihr pwd (aktuelles Verzeichnis/Ordner) folder1 ist und Sie folder1/subfolder analysieren wollen, schreiben Sie einfach (im obigen Code anstelle von ):
final File keysFileFolder = new File("subfolder");
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";
}
}
Einfaches Beispiel, das mit Java 1.7 funktioniert, um Dateien in Verzeichnissen, die auf der Kommandozeile angegeben werden, rekursiv aufzulisten:
import java.io.File;
public class List {
public static void main(String[] args) {
for (String f : args) {
listDir(f);
}
}
private static void listDir(String dir) {
File f = new File(dir);
File[] list = f.listFiles();
if (list == null) {
return;
}
for (File entry : list) {
System.out.println(entry.getName());
if (entry.isDirectory()) {
listDir(entry.getAbsolutePath());
}
}
}
}
Java 8 Files.walk(..)
ist gut, wenn man sich sicher ist, dass sie nicht werfen Vermeiden Sie Java 8 Files.walk(..) Abbruch wegen ( java.nio.file.AccessDeniedException ) .
Hier ist eine sichere Lösung, wenn auch nicht so elegant wie Java 8 Files.walk(..)
:
int[] count = {0};
try {
Files.walkFileTree(Paths.get(dir.getPath()), new HashSet<FileVisitOption>(Arrays.asList(FileVisitOption.FOLLOW_LINKS)),
Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file , BasicFileAttributes attrs) throws IOException {
System.out.printf("Visiting file %s\n", file);
++count[0];
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file , IOException e) throws IOException {
System.err.printf("Visiting failed for %s\n", file);
return FileVisitResult.SKIP_SUBTREE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir , BasicFileAttributes attrs) throws IOException {
System.out.printf("About to visit directory %s\n", dir);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}