Dateiendung ändern

Moin,

ich habe ein Grafikprogramm mit verschiedenen zeichenbaren Objekten nun möchte ich aus diesem Programm diese Objekte als SVG-Repräsentation in eine Datei exportieren.

Dazu habe ich einen JButton wo ein ActionListener dranhängt der über seine Methode actionPerformed() einen JFileChooser öffnet wo man die Datei wählen kann in die das Objekt reingeschrieben werden soll…

                int returnVal = drawingPanelView.getFileChooser()
                        .showOpenDialog(null);
                JFileChooser chooser = drawingPanelView.getFileChooser();

                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File exportFile = chooser.getSelectedFile();
                    

                    try {
                        FileWriter writer = new FileWriter(exportFile, true);
                        writer.write("<?xml version=\"1.0\"encoding=\"iso-8859-1\"?>");
                        writer.write(System.getProperty("line.separator"));
                        writer.write("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ");
                        writer.write(System.getProperty("line.separator"));
                        writer.write("\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">");
                        writer.write(System.getProperty("line.separator"));
                        writer.write("<svg xmlns=\"http://www.w3.org/2000/svg\">");

                        for (DrawableObject d : drawableObjectsModel) {

                            if (d instanceof Circle) {
                                Circle c = (Circle) d;
                                writer.write(c.toSVG());
                            }

                            writer.write("</svg>");

                            writer.flush();
                            writer.close();

                        }

                    } catch (IOException e1) {

                        e1.printStackTrace();
                    }
                }```



nun habe ich das Problem dass ich die Dateiendung gerne in .svg ändern würde damit ich wenn ich z.b. in eine .txt schreibe das ganze danach im Browser anzeigen kann. 
Was kann ich tun?



mfg

Wieso solltest du das denn dann initialk in ne .txt schreiben? Falls ne .txt Datei ausgewählt wird? Da würd ich dem FileChooser einen entsprechenden Filter geben das nur solche ausgewählt werden können, die du erlaubst (in dem Fall .svg bzw. Ordner).

Ansonsten gäbe es da noch File.renameTo(File). Damit solltest du die Datei umbenennen können. Wobei das auch leicht mal fehlschlagen könnte bzw du wahrscheinlich die alte löschen musst

Mach das doch so (das sollte ohne Probs funktionieren):

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.swing.JFileChooser;

/**
 * @author CB
 */
public class SpeichereEtwas implements Serializable {

    private boolean bool;
    private byte byet;
    private char chra;
    private short shrt;
    private int intVal;
    private long lonVal;
    private float floVal;
    private double dblVal;
    private String string;
    private Serializable serObj;

    public static SpeichereEtwas newSpeichereEtwas() { // static factory method
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public SpeichereEtwas(boolean bool, byte byet, char chra, int intVal, long lonVal, float floVal, double dblVal, String string, Serializable serObj) {
        this.bool = bool;
        this.byet = byet;
        this.chra = chra;
        this.intVal = intVal;
        this.lonVal = lonVal;
        this.floVal = floVal;
        this.dblVal = dblVal;
        this.string = string;
        this.serObj = serObj;
    }

    public void save() throws IOException {
        JFileChooser jfc = new JFileChooser();
        jfc.setMultiSelectionEnabled(false);
        jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        if (jfc.showSaveDialog(null) != JFileChooser.APPROVE_OPTION) {
            throw new IOException("no file selected");
        }
        File file = jfc.getSelectedFile();
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file), 16 * 1024 * 1024));
            oos.writeObject(this);
            oos.flush();
        } finally {
            if (oos != null) {
                oos.close();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        new SpeichereEtwas(Math.random() < 0.5, (byte) 127, (char) (1024 * 64 - 1), 77, -77L, 10.0F / 3.0F, 97.0, args.length > 0 ? args[0] : "", "drei zwei eins n0ll").save();
    }
}```

(das schreibt nicht immer nur `false` oder `true` in die Datei)

Keine Ahnung, was Code und Text mit dem Problem des TOs zu tun haben, aber zumindest der (versteckte) Hinweis zum Speichern showSaveDialog statt showOpenDialog zu verwenden.
Dann wie von Clayn erwähnt den JFileChooser noch mit einem Filter versehen, der nur Verzeichnisse und Dateien der Endung svg zulässt.
Als zusätzlichen Schritt kann man noch prüfen, ob der selektierte oder evtl. manuell eingegebene File Name mit „.svg“ endet und diese Endung ggf. ergänzen.

Starker Code

Da schlägt mein Sarkasmusmeter aber in den maximalen Bereich aus

sorry das ich so spät antworte ich habe momentan nur in der Uni Internet…

danke für die Antworten !

bezieht sich das “starker code” auf meinen Code?

mit freundlichen Grüßen

ich vermute mal stark: Nein :slight_smile: