JFileChooser - 自定义文件名(创建新文件)

Posted

技术标签:

【中文标题】JFileChooser - 自定义文件名(创建新文件)【英文标题】:JFileChooser - Custom file name (create new file) 【发布时间】:2012-12-06 07:08:51 【问题描述】:

我可能在JFileChooser API 中遗漏了一些明显的东西,但是当我尝试使用JFileChooser 保存文件时,我只能选择要保存到的预先存在的文件,而不能输入新名称并保存到那个。 JFileChooser 是否有可能实现这一点,还是我应该使用不同的 API?

我有这段代码可以尝试做我正在尝试的事情:

public static File getUserFile()       
    final SaveFileChooser fc = new SaveFileChooser();

    fc.setAcceptAllFileFilterUsed(false);

    for(FileFilter ch : FileFilterUtils.getAllFilters()) 
        fc.addChoosableFileFilter(ch);
           

    int option = fc.showSaveDialog(JPad.getFrame());

    if (option == JFileChooser.APPROVE_OPTION) 
        return fc.getSelectedFile();
     
    return null;


public static class SaveFileChooser extends JFileChooser 
    private static final long serialVersionUID = -8175471295012368922L;

    @Override
    public void approveSelection() 
        File f = getSelectedFile();
        if(f.exists() && getDialogType() == SAVE_DIALOG)
            int result = JOptionPane.showConfirmDialog(JPad.getFrame(), "The file exists, overwrite?", "Existing file", JOptionPane.YES_NO_CANCEL_OPTION);

            switch(result)
            case JOptionPane.YES_OPTION:
                super.approveSelection();
                return;
            case JOptionPane.NO_OPTION:
                return;
            case JOptionPane.CLOSED_OPTION:
                return;
            case JOptionPane.CANCEL_OPTION:
                cancelSelection();
                return;
            
        
    

【问题讨论】:

查看this 帖子和this 有一个oracle做的例子:docs.oracle.com/javase/tutorial/displayCode.html?code=http://… 【参考方案1】:

检查您的if 条件:

if(f.exists() && getDialogType() == SAVE_DIALOG)

如果f 不存在会发生什么(这是您希望实现的)?

你可以试试:

if(getDialogType() == SAVE_DIALOG) 
    if(f.exists()) 
        // your overwrite checking
     else 
        super.approveSelection();
        return;
    

【讨论】:

【参考方案2】:

试试这个

    File file = null;
    String path = "";
    JFileChooser chooser = new JFileChooser();
    chooser.addChoosableFileFilter(new ImageFileFilter());
    int returnVal = chooser.showOpenDialog(null);

    if (returnVal == JFileChooser.APPROVE_OPTION) 
        file = chooser.getSelectedFile();
        path = file.getPath();

        repaint();

    

                                        

class ImageFileFilter extends FileFilter 

    public boolean accept(File file) 
        if (file.isDirectory()) 
            return false; //or ur code what file u want to return
        

【讨论】:

您能再解释一下您的解决方案吗?它不是 SSCCE,我看不到与原始代码的关系... 我是 java 新手,我在 netbeans 中创建了一个应用程序来浏览要保存的文件,我尝试了这段代码,它让我也可以创建一个新文件夹,所以我建议使用这段代码 :) 如果它可以提供帮助不是我真的很抱歉 这不起作用,它应该调用showSaveDialog 否则用户将无法输入新文件名

以上是关于JFileChooser - 自定义文件名(创建新文件)的主要内容,如果未能解决你的问题,请参考以下文章

取消在 JFileChooser 中选择文件而不关闭对话框

简单的 JFileChooser FileFilter 不起作用

如何检查文件是不是存在,那么创建新文件的过程是啥? [复制]

将 JFileChooser 添加到 Eclipse Window Builder

使用 ajax 调用处理新对象创建的自定义事件?

为 JFileChooser 上的选定文件设置自己的文件图标