getCanonicalPath nach vorgegebenen Dateien durchsuchen

jacob90

Grünschnabel
Hallo Community,

ich habe ein Problem in einem kleinen Java-Programm.
Dieses Programm dient dazu mehrere Bilder über ImageIO zu laden, und mit diesen zu Arbeiten.
Diese Bilder liegen im gleichen Ordner wie die spätere jar-Datei. Bisher hat das Laden der Bilder mit absoluten Dateinamen auch funktioniert, nur brauche ich jetzt das Programm für teilweise variable Dateinamen der Bilder.

Mein bisheriger Code, wenn der Dateiname der Bilder bekannt ist:

Code:
String path = new File(".").getCanonicalPath();
BufferedImage view1 = ImageIO.read(new File(path + File.separator + "1.jpg"));
BufferedImage view2 = ImageIO.read(new File(path + File.separator + "2.jpg"));

Ich lasse die jar zuerst in den korrekten Ordner springen und hole mir dann die Bilder.

Nun bräuchte ich aber eine Vorgehensweise, die mir meine Bilder lädt, egal wie sie heißen, SOLANGE sie den jeweiligen Präfix besitzen(in meinem Fall für das erste Bild "1" und das zweite Bild "2"). Alle anderen Bilder sollen nicht geladen werden. Leider kann ich den Dateinamen der nach der 1(2) folgt nicht bestimmen. Das heißt die Datei, die geladen werden muss, ist von einer solchen Form: "1_#beliebigerInhalt#.jpg"

Ich hatte versucht über list() den Ordner erst einmal nach Dateien zu durchsuchen, aber leider ist getCanonicalPath nicht vom Typ File, sondern vom Typ String, deshalb funktioniert das nicht.

Leider weiß ich gar nicht, wie ich mein Problem lösen könnte.

Ich würde mich sehr über jede Hilfe freuen.

Vielen Dank,
MfG
 
Da hast du Recht, aber ich muss doch list auf path anwenden oder nicht?

Und wenn ich path.list() verwende, dann sagt er mir natürlich, dass path ein String ist.
 
Ähm, worauf soll ich list sonst verwenden? Ist denn diese Vorgehensweise in meinem Fall überhaupt die Richtige um zu meinem Ergebnis zu kommen?
Ich bin noch neu in Java, deshalb wüsste ich nicht, wie ich sonst list anwenden kann.
 
Hi.

Erstmal, statt
Java:
new File(path + File.separator + "1.jpg")
kannst du einfach schreiben
Java:
new File(path, "1.jpg")

Dann gibt es zu jeder get[...]Path() Methode in java.io.File auch eine get[...]File() Methode, die statt eines String dieselbe Information als File zurückgibt.
 
path ist, wie du schon sagt, nur ein String.
File-Objekte kennzeichnen eine Datei oder ein Verzeichnis.

Wenn man sich zB. in "C:\a\b" befindet, dann ist "C:\a\b\c\d" ein Pfad zu einem Verzeichnis,
".\c\d" ist das selbe verzeichnis, "\\meincomputer\d" kann das selbe Verzeichnis sein usw.

Ein File-Objekt für dieses Verzeichnis d ist unabhängig davon,
mit welchem der möglichen Pfade von irgendwo her man es anspricht.
Es gibt verchiedene Methoden (getCanonicalPath...),
mit denen man verschiedene Pfade abfragen kann,
aber die sind nicht nötig, wenn man schon ein File-Objekt hat,
um mit dem Verzeichnis etwas zu machen (umbenennen, löschen, Inhalt auflisten...)

...
Ein String besteht nur aus Buchstaben, der kann nichts.
Du willst wirklich list von File verwenden.
Java:
meineVariable = (new File(...)).list();
Danach kannst du das Ergebnis noch immer auf bestimmte Namen filtern.
Bzw., es gibt auch eine list-Variante, der man einen Filter übergeben kann.
 
Vielen Dank für eure Antworten. Das ist schonmal eine riesen Hilfe. Ich habe jetzt unter anderem getCanonicalPath in File geändert, so dass ich listFiles benutzen konnte. Nun bekomme ich schonmal die Ausgabe aller Dateien in meinem Ordner.

Code:
File currentDir = new File(".").getCanonicalFile();
		System.out.println(currentDir);

		File[] DirFiles = currentDir.listFiles();
		for (File imgFile:DirFiles)
		{
			System.out.println(imgFile);
		}

Jetzt müsste ich doch in die for-Schleife einfach nur nach meinen Dateien abfragen und diese in einer Variable speichern, oder?
Ich habe jetzt zum Beispiel die java.util.regex.Pattern.matches() Methode gefunden. Könnte ich damit nicht nach 1*.jpg abfragen oder eine ähnliche Variante benutzen?
 
Jetzt müsste ich doch in die for-Schleife einfach nur nach meinen Dateien abfragen und diese in einer Variable speichern, oder?
Ja, so könnte man es machen. Alternativ kann man bei der listFiles() Methode auch einen FileFilter oder FilenameFilter übergeben und die Liste gleich korrekt generieren lassen anstatt sie dann erst im zweiten Schritt zu filtern.
Java:
FilenameMatcher fnm = new FilenameMatcher() {
  public boolean accept(File dir, String name) {
    ... // return pattern.matches() oder Ähnliches...
  }
};

File[] images = currentDir.listFiles(fnm);
 

Neue Beiträge

Zurück