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.
}
Muenze3006co 
Fragesteller
 31.08.2020, 16:08

danke!!! Probiere es noch kurz aus.

0
alfredo153  31.08.2020, 16:13
@Muenze3006co

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

0
Muenze3006co 
Fragesteller
 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
Muenze3006co 
Fragesteller
 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
@Muenze3006co

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
@Muenze3006co

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
alfredo153  31.08.2020, 16:38
@Muenze3006co

String::toLowerCase() gibt es seit Java 1.0, also seit dem Jahr 1996. Ich fürchte du wirst nicht darum herumkommen ein bisschen Java zu lernen, auch wenn du nur Code aus dem Netz kopierst.

0
Muenze3006co 
Fragesteller
 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
Muenze3006co 
Fragesteller
 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

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?

Muenze3006co 
Fragesteller
 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
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
Muenze3006co 
Fragesteller
 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