Wie kann ich alle Dateien in einem Ordner mit Java lesen? Es spielt keine Rolle, welche API.
Antworten
Zu viele Anzeigen? static File mainFolder = new File("Folder");
public static void main(String[] args) {
lf.getFiles(lf.mainFolder);
}
public void getFiles(File f) {
File files[];
if (f.isFile()) {
String name=f.getName();
} else {
files = f.listFiles();
for (int i = 0; i < files.length; i++) {
getFiles(files[i]);
}
}
}
Ich denke, dies 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);
}
}
Nur um die akzeptierte Antwort zu erweitern, speichere ich die Dateinamen in einer ArrayList (anstatt sie einfach in System.out.println auszugeben). 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 mit "value" übergeben, aber der Wert wird verwendet, um auf dasselbe ArrayList-Objekt zu verweisen, das sich im JVM Heap befindet. Auf diese Weise fügt jeder Rekursionsaufruf Dateinamen zu derselben ArrayList hinzu (wir erstellen NICHT bei jedem Rekursionsaufruf eine neue ArrayList).
Oben wurden viele gute Antworten gegeben, hier ist ein anderer Ansatz: In einem Maven-Projekt wird alles, was Sie in den Ordner resources legen, standardmäßig in den Ordner target/classes kopiert. Um zu sehen, was zur Laufzeit verfügbar ist
ClassLoader contextClassLoader =
Thread.currentThread().getContextClassLoader();
URL resource = contextClassLoader.getResource("");
File file = new File(resource.toURI());
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
Um nun die Dateien aus einem bestimmten Ordner abzurufen, sagen wir, Sie haben einen Ordner namens "res" in Ihrem Ressourcenordner, ersetzen Sie einfach:
URL resource = contextClassLoader.getResource("res");
Wenn Sie Zugang zu Ihrem Paket com.companyName haben möchten, dann:
contextClassLoader.getResource("com.companyName");