Добавьте расширение .txt в JFileChooser - PullRequest
8 голосов
/ 03 января 2012

У меня есть метод, который получает текст из 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");
       }
    }
}

и фильтр текстового файла

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)";
    }
}
* 1006Фильтр файлов для TXT отлично работает, но я хочу добавить расширение «.txt» при вводе имени файла.

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

Ответы [ 4 ]

17 голосов
/ 09 ноября 2012

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

File fileToBeSaved = fileChooser.getSelectedFile();

if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){
    fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix);
}
6 голосов
/ 03 января 2012

ОБНОВЛЕНИЕ

Вы указали мне, что проверка существующих файлов не работает.Извините, я не подумал об этом, когда предложил заменить строку 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.

3 голосов
/ 24 сентября 2013

Это служебная функция от одной из моих программ, которую вы можете использовать вместо 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;
}
1 голос
/ 03 января 2012

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

/**
 * 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)
...