在JFileChooser中添加.txt扩展名

时间:2012-01-03 14:45:06

标签: 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");
       }
    }
}

和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 个答案:

答案 0 :(得分:17)

我只是用这个

File fileToBeSaved = fileChooser.getSelectedFile();

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

答案 1 :(得分:6)

<强>更新

您指出我检查现有文件不起作用。对不起,当我建议您更换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

答案 2 :(得分:3)

这是我可以使用的其中一个程序的实用程序功能,而不是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;
}

答案 3 :(得分:1)

我为此目的完成了这个功能:

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