繁体   English   中英

在JFileChooser中添加.txt扩展名

[英]Add .txt extension in 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”扩展名。

如何修改我的代码?

我只是用它

File fileToBeSaved = fileChooser.getSelectedFile();

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

UPDATE

您指出我检查现有文件不起作用。 对不起,当我建议你更换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构造函数中不可能),这就是我向sFile添加+".txt" (扩展名)的原因。

这是我的一个程序的实用程序函数,您可以使用它来代替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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM