Pfad eines Bilderordners

Hallo,

Ich möchte gerne so eine art Bilder Galerie selber programmieren,
doch ich weiß nicht, wie ich den ORDNER in dem mehrere Bilder liegen rausbekomme.
Also alle Bilder zu finden ist einfach.

Mit freundlichem Gruß,
MrSmile07

PS: Hoffe ist der richtige Forum Thread dafür ^^

Vielleicht hilft dir das weiter, oder bringt den zündenden Gedanken: Grafikdateien laden und anzeigen (Java)

Alternativ kannst du den Benutzer das Verzeichnis angeben lassen. Dazu kannst du [japi]JFileChooser[/japi] nutzen.

Ich würde auch einen JFileChooser verwenden.
Hier ein DirtyOneClassExample:

[SPOILER]```package de.skysoldier.bytewelt;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.RepaintManager;

public class JGallery {

private int imageIndex;

public JGallery(){
	final ArrayList<BufferedImage> allImages = new ArrayList<>();
	final JFileChooser chooser = new JFileChooser();
	chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
	JFrame f = new JFrame();
	f.setSize(800, 600);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setLocationRelativeTo(null);
	final JPanel imageView = new JPanel(){
		protected void paintComponent(Graphics g){
			super.paintComponent(g);
			if(!allImages.isEmpty()) g.drawImage(allImages.get(imageIndex), 0, 0, getWidth(), getHeight(), null);
		}
	};
	f.add(imageView, BorderLayout.CENTER);
	JPanel controls = new JPanel();
	controls.setPreferredSize(new Dimension(0, 50));
	ActionListener switchImageListener = new ActionListener(){
		public void actionPerformed(ActionEvent e){
			imageIndex += Integer.parseInt(e.getActionCommand());
			if(imageIndex < 0) imageIndex = allImages.size() - 1;
			if(imageIndex >= allImages.size()) imageIndex = 0;
			imageView.repaint();
		}
	};
	JButton buttonPrevious = new JButton("<--");
	buttonPrevious.addActionListener(switchImageListener);
	buttonPrevious.setActionCommand("-1");
	controls.add(buttonPrevious);
	JButton buttonNext = new JButton("-->");
	buttonNext.addActionListener(switchImageListener);
	buttonNext.setActionCommand("1");
	controls.add(buttonNext);
	JButton add = new JButton("add images");
	add.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			chooser.showOpenDialog(null);
			File imageDir = chooser.getSelectedFile();
			File files[] = imageDir.listFiles();
			for(File f : files){
				if(f.getName().substring(f.getName().lastIndexOf('.') + 1).equals("jpg")){
					try{
						allImages.add(ImageIO.read(f));
					}
					catch(Exception ex){
						ex.printStackTrace();
					}
				}
			}
			imageView.repaint();
		}
	});
	controls.add(add);
	f.add(controls, BorderLayout.NORTH);
	f.setVisible(true);
}

public static void main(String[] args){
	new JGallery();
}

}


wenn du keinen chooser willst musst du halt rekursiv durch .. alles.. laufen (zB C), naja, kannst du auch in einem
hintergrundprozess tun, wie auch immer - bei jedem file schauen obs ein verzeichnis ist (isDirectory()) wenn ja dann mit
listFiles() eben das Array der enthaltenen Files holen, und je File schauen ob's ein bild ist oder nicht.
(In meinem Beispiel oben würden nur jpg's akzeptiert werden)

Danke erstmal für die schnellen antworten,
aber anscheinend wurde das Problem nicht richtig verstanden.^^

Von jedem Bild habe ich schon den Pfad mit (isDirectory()) gehabt. (Also NUR gif, png und jpg Dateien)

Mein Problem ist, dass ich den Ordner Namen (in dem das Bild liegt) nur bekommen möchte.
Und das die Pfade zusammen gefast werden.

Ich poste mal ein Bild von der Root-Struktur(hoffentlich hilft es dies zu erklären):

In diesem Fall möchte ich nur ein Rechteck auf dem Bildschirm haben, wo “Ordner 3” steht.
Mit dem ersten Bild des Ordners. (Wem es hilft, ichprobiere so eine Art Klon des Programmes: Quickpic (für Android eine Bildergalerie App) zu machen)

Mit freundlichem Gruß,
MrSmile07

Hm, mir ist ehrlich gesagt auch nach der Beschreibung nicht klar was du genau machen möchtest.
Führ das ganze vllt mal etwas klarer aus. Was genau möchtest du erreichen und wo genau ist dein Problem?

in welchen Dimensionen bewegt sich die Frage?
hast du ein File-Objekt eines Bildes → dann ist doch wohl das übergeordnete Verzeichnis herauszufinden,

was hast du dabei mit isDirectory() bisher gemacht? auf ein Bild-File ein unsinniger Befehl,

wie kommst du eigentlich zu den Bildern, ein Rekursion über alle Verzeichnisse? dabei könnte isDirectory() natürlich beteiligt sein


hast du eine GUI, hast du eine bestimmte Frage zu JList, JTree, irgendwas selber in ein Panel zu malen mit Graphics-Befehlen?
hast du Kenntnisse/ Pläne zu Swing, AWT oder …?
Ziel der Fragen ist dir nochmal zu vermitteln wie wenig für andere klar ist worum es gerade geht,

EikeB hat es natürlich auch schon ausgedrückt,
aber fast so allgemein dass die Antwort wieder „möchte ich nur ein Rechteck auf dem Bildschirm haben“ lauten könnte :wink:

Uebergeordnetes verzeichniss heruasfinden oder wie? Wie waers mit substring(0, lastindexof(""))…?

Ich rate einfach mal: Der TE möchte eine Ordnerstruktur (momentan noch die seines Rechners) grafisch darstellen, da er für seine Bildergalerie einen Dateibrowser benötigt. Wenn ich richtig geraten habe, dann bitte aufzeigen!
Wenn Du mit JavaFX arbeiten würdest, gäbe es eine relativ schnellen Weg, dies darzustellen, nämlich mittels TreeView. Gibt es nicht etwas ähnliches in Swing? Ich meine, mich zu erinnern, bin aber zu faul zum nachsehen.

wie wärs mit einem stink normalen JTree?
auch wenn ich mal bezweifle, dass dies tatsächlich das problem des to’s ist…

Mir auch nicht. Wie wäre es mal mit einem Bild vom Soll-Zustand?

Wenn ich es also richtig verstehe, möchtest du ein ganzes Laufwerk oder einen Teil davon durchlaufen und aus dem gesamten Verzeichnisbaum die Verzeichnisse extrahieren, die Bilddateien enthalten?
Die ermittelten Verzeichnisse möchtest du dann, sagen wir navigationsartig, untereinander zur Auswahl darstellen?

http://puu.sh/gGugQ/b1d636272d.flv

Hoffe das hilft zur Erklärung.

Mit freundlichem Gruß,
MrSmile07

Nun wenn du das Bild File bereits hast bzw. Den exakten Pfad zum Bild, dann bekommst du den Parent mit Hilfe dieses Codes.

File img = new File("..<exakter Pfad zur Datei>..");
File parentFolder = img.getParentFile();
String nameOfParentFolder = parentFolder.getName();

Bezueglich des Ersten Bildes. Du brauchst ja sowieso eine Liste aller Datein. Diese musst du nach deinem Kriterium sortieren (Stichwort: Comparable bzw Comparator)
Weiters wirst du dir eine Datenstruktur überlegen müssen wie du deine bilderOrdner speicherst. vl eine Liste des Typs z.B. ImageFolder.

Die Klasse ImageFolder übergibst du dann die Liste aller enthaltetn Bilder und auch dem Namen den du mit meinem Code erhältst

class ImageFodler{
 public ImageFolder(File[] files, String name){...

Ok, danke nochmal für die Hilfe.

Mit freundlichem Gruß,
MrSmile07