在JFileChooser中添加.txt扩展名

Alb*_*sut 8 java swing 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");
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

和一个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)";
    }
}
Run Code Online (Sandbox Code Playgroud)

txt的文件过滤器工作正常但我想要的是在输入文件名时添加".txt"扩展名.

如何修改我的代码?

小智 18

我只是用它

File fileToBeSaved = fileChooser.getSelectedFile();

if(!fileChooser.getSelectedFile().getAbsolutePath().endsWith(suffix)){
    fileToBeSaved = new File(fileChooser.getSelectedFile() + suffix);
}
Run Code Online (Sandbox Code Playgroud)


Alb*_*ano 6

UPDATE

您指出我检查现有文件不起作用.对不起,当我建议你更换BufferedWriter线路时,我没想到.现在,替换这个:

File sFile = fSave.getSelectedFile();
Run Code Online (Sandbox Code Playgroud)

有:

File sFile = new File(fSave.getSelectedFile()+".txt");
Run Code Online (Sandbox Code Playgroud)

以此替代,它现在没有需要更换的线BufferedWriter,增加.txt了扩展.然后,将该行替换为您发布的代码中的行(BufferedWriter out = new BufferedWriter(new FileWriter(sFile));而不是BufferedWriter out = new BufferedWriter(new FileWriter(sFile+".txt"));).

现在程序应该按预期工作.

我忘了提到你必须评论这条线:

sFile.createNewFile();
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您将使用该类创建一个空文件File.

就在这一行之后,有:BufferedWriter out = new BufferedWriter(new FileWriter(sFile));.使用此行,您将再次创建相同的文件.写作程序正在发生两次!我认为插入两个执行相同任务的指令是没用的.

此外,在BufferedWriter构造函数上,您可以为文件名追加一个字符串(在File构造函数中不可能),这就是我添加+".txt"(扩展名)的原因sFile.