# Savedialog - getSelectedFile() mit richtiger Endung.



## Ariol (29. Okt 2007)

Hi

1. 
------------------------------------------------------------------------
ich hab folgenden Code zum speichern einer Klasse als serialisiertes Objekt:


```
public boolean saveCourseManager() {
		boolean saved = true;

		final JFileChooser fc = new JFileChooser();
		fc.setFileFilter(new CMFileFilter());
		int returnVal = fc.showSaveDialog(this);

		if (returnVal == JFileChooser.APPROVE_OPTION) {
			try {
				CourseManager.saveCourseManager(fc.getSelectedFile(), courseManager);
			} catch (Exception e) {
				saved = false;
			}
		}

		return saved;
	}
```

Soweit so gut funktioniert es auch.

Problem: Wenn ich beim Speichern die Endung nicht mit angebe, wird diese weggelassen.


Gibt es eine Möglichkeit das automatisch anhängen zu lassen?

------------------------------------------------------------------------



2.
------------------------------------------------------------------------
Hier gehts darum das ich in der Auswahlbox des Dateityps im Save- bzw. OpenDialog immer noch alle Dateien drinstehen habe.

Kann man das wegbekommen?
------------------------------------------------------------------------


Schonmal danke für alle Antworten.

Ariol


----------



## Wildcard (29. Okt 2007)

1. Du bekommst ein File. Mach dir doch ein neues das deine Endung bekommt
2. Wie sieht dein Filter aus?


----------



## Ariol (29. Okt 2007)

Wildcard hat gesagt.:
			
		

> 1. Du bekommst ein File. Mach dir doch ein neues das deine Endung bekommt
> 2. Wie sieht dein Filter aus?



Hui, das ging ja schnell^^

1. Stimmt - da hab ich mich wohl zu sehr auf irgendwelche tollen Methoden eingeschossen

2.

```
private class CMFileFilter extends FileFilter {

		@Override
		public boolean accept(File f) {
                        //cm-Dateien auswählbar und ordner sichtbar
			if (f.getName().toLowerCase().endsWith(".cm") || f.isDirectory()) {
				return true;
			}
			return false;
		}

		@Override
		public String getDescription() {
			return "CourseManager-File";
		}

	}
```


----------



## Wildcard (29. Okt 2007)

```
public class Chooser {
	
	public static void main(String[] args) {
		JFileChooser chooser = new JFileChooser();
		chooser.setFileFilter(new CMFileFilter());
		chooser.showSaveDialog(null);
	}


}
class CMFileFilter extends FileFilter {

    @Override
    public boolean accept(File f) {
                      //cm-Dateien auswählbar und ordner sichtbar
       if (f.getName().toLowerCase().endsWith(".cm") || f.isDirectory()) {
          return true;
       }
       return false;
    }

    @Override
    public String getDescription() {
       return "CourseManager-File";
    }

 }
```
Also ich sehe damit nur cm Dateien


----------



## Ariol (29. Okt 2007)

Hmm,

ich kann bei Dateityp immer noch "Alle Dateien" als Option wählen ....


----------



## Wildcard (29. Okt 2007)

Ach das meinst du. Tut mir leid, bin nicht sicher ob man das entfernen kann.
Dein Dateityp sollte allerdings die Default Einstellung sein.


----------



## Ariol (29. Okt 2007)

ja, das ist nicht das Problem - naja, muss ich halt mit leben ^^

Danke für deine Hilfe. Speichern funktioniert jetzt:

```
public boolean saveCourseManager() {
		boolean saved = true;

		CMFileFilter cmFileFilter = new CMFileFilter();

		final JFileChooser fc = new JFileChooser();
		fc.setFileFilter(cmFileFilter);
		
		int returnVal = fc.showSaveDialog(this);

		if (returnVal == JFileChooser.APPROVE_OPTION) {
			try {
				File out = fc.getSelectedFile();
				if (!cmFileFilter.accept(out)) {
					out = new File(out.getAbsolutePath() + cmFileFilter.ending);
				}
				CourseManager.saveCourseManager(out, courseManager);
				
			} catch (Exception e) {
				saved = false;
			}
		}

		return saved;
	}
```

---------------------------------

Hab noch etwas:

Wenn die Datei bereits existiert, kann ich dann im Standard-Speichern-Dialog einstellen, dass dieser mir einen "Datei existiert bereits. Möchten Sie diese überschreiben"-Dialog rausschmeißt??

Das nachträgliche Abfragen ist etwas ungünstig...


----------



## Wildcard (29. Okt 2007)

überschreib einfach approveSelection


----------



## Ariol (29. Okt 2007)

Danke.

Das war ein Klasse Tipp.

Ich hab jetzt auch die automatische Erweiterung beim Speichern in den Teil gelegt.

Das ganze funzt super^^


```
@Override
		public void approveSelection() {
			File file = getSelectedFile();
			if (!accept(file)) {
				String ending = cmFileFilter.ending;
				file = new File(file.getAbsolutePath() + ending);
			}

			boolean override = true;

			if (file.exists()) {
				String message = language.getProperty("OVERRIDE",
						"File exists. Override?");
				String title = language.getProperty("OVERRIDE_TITLE",
						"Override file");
				int result = JOptionPane.showConfirmDialog(parent, message,
						title, JOptionPane.YES_NO_OPTION);

				if (result == JOptionPane.OK_OPTION) {
					override = true;
				} else {
					override = false;
				}
			}

			if (override) {
				super.approveSelection();
			}
		}
```


----------

