Wie kann ich in einem dir alle Bilder einlesen, Java?

4 Antworten

So zum Beispiel (ungetestet, sollte aber im Wesentlichen passen):

File dir = new File("/home/ich/meinefotos");
for(File pngFile: dir.listFiles((d, s) -> s.endsWith(".png"))) {
    BufferedImage img = ImageIO.read(pngFile);
    // usw.
}

verreisterNutzer  31.08.2020, 16:14

ne da klappt was nicht... bekomme kein Fehler aber auch kein Output OBWOHL da 1-2 .png Dateien in meinen angegeben Ordner sind...

0
alfredo153  31.08.2020, 16:16
@verreisterNutzer

Dann geh mit dem Debugger durch oder lass dir erstmal nur die Files ausgeben. Eine typische Fehlerquelle bei Anfängern sind Windows-Pfade mit Backslashes. Du kannst auch mal mit

dir.exists() && dir.isDirectory()

prüfen, ob der Pfad korrekt ist. Der obige Code schert sich nicht drum.

0
alfredo153  31.08.2020, 16:31
@verreisterNutzer

Debuggen werd ich dir das nicht, aber eine Möglichkeit ist dass die Endungen großgeschrieben sind. Dieser Filter ist etwas robuster:

(d, s) -> s.toLowerCase().endsWith(".png")
0
verreisterNutzer  31.08.2020, 16:39
@alfredo153
auch wenn du nur Code aus dem Netz kopierst.

Ähm NUR... Hab ein NN alleine Programmiert und nicht irgendwo rauskopiert... :)

0
verreisterNutzer  31.08.2020, 16:45
@alfredo153

Will ja nix sagen... aber IntelliJ zeigt den Part als Fehler an... (d, s) -> s.toLowerCase().endsWith(".png")

0
verreisterNutzer  31.08.2020, 16:08

danke!!! Probiere es noch kurz aus.

0
alfredo153  31.08.2020, 16:13
@verreisterNutzer

Übrigens ist es eher schlechter Stil, die ganze lange Arbeit im Konstruktor zu machen. Dafür ist er nicht da.

0
verreisterNutzer  31.08.2020, 16:17
@alfredo153

Ja ehrlich gesagt hab ich das net programmiert sondern abkopiert ausm Internet und hab was verbessert, bzw. was ich noch brauch... Hab ich abkopiert, weil ich mich mit ki beschäftige, dafür aber keine Bock habe, ein Bild einlese Programm zu programmieren :)

0

Die Namen aller Png-Dateien in einem Ordner kriegst du z.B. so:

		File dir = new File("C:\\Users\\xy\\pngdir");
		String[] fileNames = dir.list((file, filename) -> filename.matches(".*\\.png"));

oder falls du den vollen Pfadnamen brauchst:

		File dir = new File("C:\\Users\\xy\\pngdir");
		File[] files = dir.listFiles(file -> file.getPath().matches(".*\\.png"));
		for (File file: files) {
			// Read(file.getAbsolutePath());
		}

Deinen Code musst du halt so ändern, dass er einmal pro png-Datei aufgerufen werden kann. Z.B. indem du dem Konstruktor den Pfad mitgibst und in der main-Methode halt jede Datei durchgehst.

wie wäre es ein ordendlichen image deserializer zu verwenden der nativ bitmaps auspuckt und methoden hat um directorys durchzuiterieren?


theplayer1230  31.08.2020, 16:05

also das beispiel ist schwach aber sollte mehr oder weniger klappen du brauchst nur noch eine foreach schleife die jede datei durchgeht und dafür brauchst du ne directory collection

so etwas

File[] files = new File("C:/").listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.println("Directory: " + file.getName());
            showFiles(file.listFiles()); // Calls same method again.
        } else {
            System.out.println("File: " + file.getName());
        }
    }
0
verreisterNutzer  31.08.2020, 16:08
@theplayer1230

Ok und beim BufferedImage sag ich nicht "3.png" sondern file.getName()... warte aber zeigt file.getName() dann den GANZEN Path?

0
verreisterNutzer  31.08.2020, 16:03

ähm... ist mir im Moment relativ.... mich würde es interessieren wie ich das auslesen von png Bildern in einer dir machen kann. Hast du da eine Idee?

0