我是Java新手所以请耐心等待.
在我的程序中,我想让用户能够将文件保存到他们选择的目录中.在做了一点研究之后,我发现了这个叫做JFileChooser的漂亮的类.我想要做的是允许用户通过JFileChooser GUI转到他们想要的目录,键入他们文件的名称,并允许他们将文件保存到所需的目录.我尝试在线寻找如何做到这一点的解决方案,但几乎在我读到的每个地方,最后的答案是"现在你必须让你的程序保存文件",我不知道该怎么办.有人可以提供一些评论很好的虚拟代码来完成上述描述吗?此外,有谁知道JFileChooser是否提供"新文件夹"选项?
提前致谢.
将所有部分组合在一起并非易事.您需要FileFilter才能保存到特定扩展名.
这是我的一个Swing应用程序的示例.
protected static final String EXTENSION = ".png";
protected static final String FORMAT_NAME = "png";
protected static final LayoutFileFilter SAVE_AS_IMAGE = 
        new LayoutFileFilter("PNG Image Format", EXTENSION, true);
protected int chooseSaveFile(BufferedImage image) {
    JFileChooser fileChooser = new JFileChooser();
    ExtensionFileFilter pFilter = new ExtensionFileFilter(SAVE_AS_IMAGE);
    fileChooser.setFileFilter(pFilter);
    int status = fileChooser.showSaveDialog(frame.getFrame());
    if (status == JFileChooser.APPROVE_OPTION) {
        File selectedFile = fileChooser.getSelectedFile();
        try {
            String fileName = selectedFile.getCanonicalPath();
            if (!fileName.endsWith(EXTENSION)) {
                selectedFile = new File(fileName + EXTENSION);
            }
            ImageIO.write(image, FORMAT_NAME, selectedFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return status;
}
您会注意到方法中的代码确保EXTENSION附加在文件名的末尾,除非EXTENSION已存在.这是Java等效项中缺少的标准Windows行为.
为了保存特定的扩展名,您需要一个FileFilter.
import java.io.File;
import javax.swing.filechooser.FileFilter;
public class ExtensionFileFilter extends FileFilter {
    protected LayoutFileFilter filter;
    protected String description;
    protected String[] extensions;
    public ExtensionFileFilter(LayoutFileFilter filter) {
        this(filter.getDescription(), filter.getExtension());
        this.filter = filter;
    }
    public ExtensionFileFilter(String description, String extension) {
        this(description, new String[] {extension});
    }
    public ExtensionFileFilter(String description, String[] extensions) {
        if ((description == null) || (description.equals(""))) {
            this.description = extensions[0] + " {" + extensions.length + "}";
        } else {
            this.description = description;
        }
        this.extensions = (String[]) extensions.clone();
        toLower(this.extensions);
    }
    private void toLower(String[] extensions) {
        for (int i = 0, n = extensions.length; i < n; i++) {
            extensions[i].toLowerCase();
        }
    }
    @Override
    public boolean accept(File file) {
        if (file.isDirectory()) {
            return true;
        } else {
            String path = file.getAbsolutePath().toLowerCase();
            for (int i = 0, n = extensions.length; i < n; i++) {
                String extension = extensions[i];
                if (path.endsWith(extension)) {
                    return true;
                }
            }
        }
        return false;
    }
    @Override
    public String getDescription() {
        return description;
    }
    public LayoutFileFilter getLayoutFileFilter() {
        return filter;
    }
}
最后,LayoutFileFilter.
public class LayoutFileFilter {
    boolean isDefault;
    String description;
    String extension;
    public LayoutFileFilter() {
    }
    public LayoutFileFilter(String description, String extension,
            boolean isDefault) {
        this.description = description;
        this.extension = extension;
        this.isDefault = isDefault;
    }
    public boolean isDefault() {
        return isDefault;
    }
    public void setDefault(boolean isDefault) {
        this.isDefault = isDefault;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getExtension() {
        return extension;
    }
    public void setExtension(String extension) {
        this.extension = extension;
    }
}
| 归档时间: | 
 | 
| 查看次数: | 15137 次 | 
| 最近记录: |