Добавлять.расширение txt в JFileChooser

у меня есть метод, который получает текст из JTextArea, создает файл и пишет текст на нем как код ниже:

public void createTxt() {

    TxtFilter txt = new TxtFilter();

    JFileChooser fSave = new JFileChooser();

    fSave.setFileFilter(txt);
    int result = fSave.showSaveDialog(this);
    if(result == JFileChooser.APPROVE_OPTION) {
        File sFile = fSave.getSelectedFile();
        FileFilter selectedFilter = fSave.getFileFilter();

        String file_name = sFile.getName();
        String file_path = sFile.getParent();

        try{
            if(!sFile.exists()) {
                sFile.createNewFile();
                BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
                out.write(jTextArea1.getText());
                out.close();
                JOptionPane.showMessageDialog(null, "Warning file • " + file_name + " • created succesfully in n" + file_path);    
            } else {
                String message = "File • " + file_name + " • already exist in n" + file_path + ":n" + "Do you want to overwrite?";
                String title = "Warning";
                int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
                if(reply == JOptionPane.YES_OPTION){
                    sFile.delete();
                    sFile.createNewFile();
                    BufferedWriter out = new BufferedWriter(new FileWriter(sFile));
                    out.write(jTextArea1.getText());
                    out.close();
                    JOptionPane.showMessageDialog(null, "File • " + file_name + " • overwritten succesfully in n" + file_path);

                }
            }
        }
       catch(IOException e) {
           System.out.println("Error");
       }
    }
}

и txt файловый фильтр

public class TxtFilter extends FileFilter{
    @Override
    public boolean accept(File f){
        return f.getName().toLowerCase().endsWith(".txt")||f.isDirectory();
    }
    @Override
    public String getDescription(){
        return "Text files (*.txt)";
    }
}

фильтр файлов для txt работает нормально, но я хочу добавить ".расширение " txt " при вводе имени файла.

Как мне изменить свой код?

4 ответов


обновление

Вы указали мне, что проверка существующих файлов не работает. Извините, я не подумал об этом, когда предложил вам заменить BufferedWriter линии. Теперь замените это:

File sFile = fSave.getSelectedFile();

С:

File sFile = new File(fSave.getSelectedFile()+".txt");

С этой заменой теперь не требуется заменять строку BufferedWriter добавление .txt расширение. Затем замените эту строку строкой в коде, который вы разместили (с BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); вместо BufferedWriter out = new BufferedWriter(new FileWriter(sFile+".txt"));).

теперь программа должна работать, как ожидалось.

я забыл упомянуть, что вы должны комментировать строку:

sFile.createNewFile();

таким образом, вы создаете пустой файл с классом File.

сразу после этой строки есть: BufferedWriter out = new BufferedWriter(new FileWriter(sFile));. С помощью этой строки вы снова создаете тот же файл. Процедура написания происходит два раза! Я думаю, что бесполезно вставлять две инструкции, которые делают то же самое задача.

также на BufferedWriter конструктор, вы можете добавить строку для имени файла (это невозможно на File конструктор), вот почему я добавил +".txt" (расширение) к sFile.


Я просто использую это

File fileToBeSaved = fileChooser.getSelectedFile();

if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){
    fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix);
}

это функция утилиты из одной из моих программ, которую вы можете использовать вместо JFileChooser.getSelectedFile, чтобы получить расширение тоже.

/**
 * Returns the selected file from a JFileChooser, including the extension from
 * the file filter.
 */
public static File getSelectedFileWithExtension(JFileChooser c) {
    File file = c.getSelectedFile();
    if (c.getFileFilter() instanceof FileNameExtensionFilter) {
        String[] exts = ((FileNameExtensionFilter)c.getFileFilter()).getExtensions();
        String nameLower = file.getName().toLowerCase();
        for (String ext : exts) { // check if it already has a valid extension
            if (nameLower.endsWith('.' + ext.toLowerCase())) {
                return file; // if yes, return as-is
            }
        }
        // if not, append the first extension from the selected filter
        file = new File(file.toString() + '.' + exts[0]);
    }
    return file;
}

Я сделал эту функцию для этого :

/**
 * Add extension to a file that doesn't have yet an extension
 * this method is useful to automatically add an extension in the savefileDialog control
 * @param file file to check
 * @param ext extension to add
 * @return file with extension (e.g. 'test.doc')
 */
private String addFileExtIfNecessary(String file,String ext) {
    if(file.lastIndexOf('.') == -1)
        file += ext;

    return file;
}

тогда вы можете использовать функцию, например, таким образом:

JFileChooser fS = new JFileChooser();
String fileExt = ".txt";
addFileExtIfNecessary(fS.getSelectedFile().getName(),fileExt)