JFileChooser Abfangen des DateiTypen möglich??

MarioK

Aktives Mitglied
Hallo Gemeinschaft,
ist es generell möglich, wenn der Benutzer über ein Menu ein JFileChosser showSaveDialog bekommt, denn vom Benutzer gewählten DateiTypen abzufangen ??? Wenn ja wie ...

In meinem JFileChooser hat der Benutzer die Wahl zwischen ".xml" und "Alle Dateien" anzeigen. Nur ich möchte halt wenn er ".xml" auswählt, dass nur dann die Dateien als .xml gespeichert werden. Und bei der Auswahl von "Alle Dateien" kann der Benutzer alle anderen DateiEndungen(typen) eingeben (zB Beispiel.edd usw).

mit
Code:
File file = jfc.getSelectedFile();
in Verbindung mit
Code:
if(!meinSelbstGeschriebenerFilter.accept(file))
kam ich nicht sehr weit. Vielleicht habt ihr da ein Besipiel oder einen Ansatz für mich??
 
Weiß nicht, ob ich dich jetzt richtig verstanden habe. Vielleicht so:
Java:
if(jfc.getSelectedFile().getName().endsWidth(".xml")) {
   //mit .xml Extension speichern
}
 
Weiß nicht, ob ich dich jetzt richtig verstanden habe. Vielleicht so:
Java:
if(jfc.getSelectedFile().getName().endsWidth(".xml")) {
   //mit .xml Extension speichern
}

mit diesem frage ich doch ab, wenn der Benutzer eine File ausgewählt hat.
Im beigefügtem Bild habe ich das mal gekennzeichnet. Also wenn der Bentzer dann seinen Dateinnamen eingibt, soll das bei dieser Auswahl automatisch als .xml gespeichert werden, wählt dagegen der Benutzer "Alle Dateien" aus, kann der Benutzer jeden Dateiendung benutzen.
So in der Form, wenn es das gibt : jfc.getDateityp das wäre eine super Sache.
Das Abspeichern an sich habe ich schon, mir fehlt nur noch die if Anweisung. Warum ich diese Abfrage möchte, ist, wenn der Benutzer .xml wählt dann wird auch als .xml gespeichert, wenn er was anderes wählt wird als ByteStrom gespeichert.

Ich hoffe das ich es jetzt verständlich rüber gebracht habe.
 

Anhänge

  • Unbenannt-1.jpg
    Unbenannt-1.jpg
    20,6 KB · Aufrufe: 31
Du könntest FileFilter setzen:

Java:
JFileChooser jc = new JFileChooser(favPath);
        jc.setFileSelectionMode(JFileChooser.FILES_ONLY);//<-- !
        jc.setDialogTitle("Wähle Textdatei aus...");
        jc.setFileFilter(new FileFilter() {
            
            @Override
            public String getDescription() {
                return "Textdatei (*.txt)";
            }
            
            @Override
            public boolean accept(File f) {
                return f.getName().toLowerCase().endsWith(".txt");
            }
        });
 
nein, dass meinte ich nicht ... einen FileFilter habe ich schon gesetzt ...
also hier mal der Code: man kann doch zB be Photoshop auch auswählen ob du die Datei als .jpg oder .psd usw speichern möchtest und dann speichert auch Photoshop, wenn du .jpg gewählt hast, die Datei als .jpg und nicht als ´zB .txt Datei. Und um dieses Abfangen geht es. Bei mir ist es nur kürzer ... du wählst .xml dann führe das aus wie im Code stehend, du wählst "Alle Dateien" dann führe das aus wie im Code sthend ...
Java:
final JFileChooser jfc = new JFileChooser();
				XMLFileFilter xmlFileFilter = new XMLFileFilter();
		        jfc.setFileFilter(xmlFileFilter);
				if (jfc.showSaveDialog(save) == JFileChooser.APPROVE_OPTION) {
					if(jfc.getFileSelectionMode() == 1){					//<---- das suche ich if(jfc.getSelectedDatentyp
						PunkteToXML meinePunkte = new PunkteToXML(kreise);
						PunkteXMLWrite meineDB = new PunkteXMLWrite();						
						try {
							File file = jfc.getSelectedFile();
							//wenn der Benutzer keine Dateiendung oder eine falsche
							//angibt, wird .xml angehängt
							if(!xmlFileFilter.accept(file)){
								String path = jfc.getSelectedFile().getPath();
								path = path + ".xml";
								file = new File(path);
							}
							meineDB.writePunkteToXML(meinePunkte, file);
						} catch (JAXBException e1) {
							e1.printStackTrace();
							System.out.println("Fehler Auslesen");
						}
					}																	
					else{			
						FileOutputStream fos;
						ObjectOutputStream oos = null;
						File file = jfc.getSelectedFile();
						try {
							fos = new FileOutputStream(file);
							oos = new ObjectOutputStream(fos);
						} catch (FileNotFoundException e2) {
							e2.printStackTrace();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
				
						try {
							oos.writeObject(kreise);
						} catch (IOException e1) {
							e1.printStackTrace();
						}
				
						try {
							oos.close();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
					}
				}
 
also gemäß der API gibt es wohl keine solche Möglichkeit, deswegen lasse ich jetzt die FileFilter weg und nehme die Methode von L-ectron-X...
Java:
if(jfc.getSelectedFile().getName().endsWidth(".xml")) {
   //mit .xml Extension speichern
}

ist erstmal der sicherste Weg und geht auch. Aber trotzdem das muss doch irgendwie gehen. Photoshop und Co können das doch auch...
 

Zurück
Oben