Mit JFileChooser eine Dateiendung vorbesetzten

Chriss82

Grünschnabel
Hallo Zusammen!
Und zwar möchte eine Datei über einen JFileChooser (SaveFile) speicher. Nun soll es aber so sein das der Benutzer..
wenn er nun keine Endung eingibt von FileChooser automatisch eine Endung generiert.
Die FileFilter sind eingebunden, doch es wird leider keine Endung generiert.
Ich hoffe Ihr könnt mir da weiter helden.

MfG
Chris

Code:
 JFileChooser CmyChooserW=new JFileChooser();
    CmyChooserW.setMultiSelectionEnabled(false);
    CmyChooserW.setAcceptAllFileFilterUsed(false);
    CmyChooserW.setDialogTitle(CStringResaurcesW.FILECHOOSER_SAVE_TITLE);
    CmyChooserW.setFileFilter(new FileFilter() {
                public boolean accept(File f) {
                    return f.getName().toLowerCase().endsWith(".chw")|| f.isDirectory();
                }
                public String getDescription() {
                    return CStringResaurcesW.FILECHOOSER_FILTER;
                }
            });
 
Hallo,

so viel ich weiss, generiert der JFileChooser die Endung nicht automatisch. Also musst Du es manuell machen, was ja nicht so schwer ist. Als erstes würde ich in der Filter-Klasse in der toString()-Methode die entsprechende Extension zurückgeben, für den Fall, dass Du später eventuell mehrere Filter verwendest:
Java:
/**
 * CHW file filter.
 */
class CHWFilter extends FileFilter {
	private String extension = "chw";
    /** {@inheritDoc} */
    public boolean accept(File f) {
        String str = f.getName().toLowerCase();
        return str.endsWith("." + extension) || f.isDirectory();
    }

    /** {@inheritDoc} */
    public String getDescription() {
        return "CHW(*.CHW)";
    }

    /** {@inheritDoc} */
    public String toString() {
        return extension;
    }
}
Dann würde ich eine Methode schreiben, die mir den File-Namen validiert und, falls nötig, die richtige extension anhängt:
Java:
/**
 * Checks if the file name ends with the extension of the given filter.
 *
 * @param file the file
 * @param filter the file filter
 * @return
 */
private File validateFileName(final File file, final FileFilter filter) {
    if (filter.accept(file)) {
        return file;
    }
    // remove wrong file extension if any
    String fileName = file.getName();
    final int index = fileName.lastIndexOf(".");
    if (index > 0) {
        fileName = fileName.substring(0, index);
    }

    final String extension = filter.toString();
    final String newFileName = fileName + "." + extension;

    final File newFile = new File(file.getParent(), newFileName);

    return newFile;
}
Und hier eine Beispiel-Klasse, die die Methode benutzt:
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;

/**
 * The Class JFileChooserTest.
 */
public class JFileChooserTest extends JFrame {

    /**
     * Create a new instance of <code>JFileChooserTest</code>.
     */
    public JFileChooserTest() {
        super("JFileChooserTest");
        final Container contentPane = getContentPane();
        contentPane.setLayout(new FlowLayout());
        final JButton button = new JButton("save file...");
        contentPane.add(button);

        button.addActionListener(new ActionListener() {
            private File currentDir = null;
            /** {@inheritDoc} */
            public void actionPerformed(final ActionEvent e) {
                final JFileChooser fileChooser = new JFileChooser(currentDir);
                fileChooser.setAcceptAllFileFilterUsed(false);
                fileChooser.setFileFilter(new CHWFilter());
                int result = fileChooser.showSaveDialog(JFileChooserTest.this);
                if (JFileChooser.APPROVE_OPTION == result) {
                    File file = fileChooser.getSelectedFile();
                    final FileFilter fileFilter = fileChooser.getFileFilter();
                    file = validateFileName(file, fileFilter);
                    currentDir = fileChooser.getCurrentDirectory();
                    if (file != null) {
                        System.out.println("file: " + file);
                    }
                }
            }
        });
    }

    /**
     * The main method.
     * 
     * @param args the arguments
     */
    public static void main(String[] args) {
        final JFrame frame = new JFileChooserTest();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        final Dimension size = new Dimension(400, 300);
        frame.setSize(size);
        final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation(screen.width / 2 - size.width / 2 ,
                screen.height / 2 - size.height / 2);
        frame.setVisible(true);
    }
}

Grüße
Vincent
 
Zurück