使用JFileChooser

时间:2018-11-02 04:54:10

标签: java swing jfilechooser

我有一个用Java swing内置的软件,除了用户导出的文件外,我还需要输出一个元数据文件。我可以分别导出数据文件或元数据文件,但同时输出两个文件时仍然遇到麻烦。我知道JFileChooser具有chooser.setSelectedFiles()chooser.getSelectedFiles()用于此类目的。有人可以告诉我如何正确使用它们吗?以下是我尝试过的代码(但它们不起作用):

File[] outputFiles = new File[]{
        new File(fileName+".txt"),
        new File(fileName+"_metadata.txt")};

exportChooser.setSelectedFiles(outputFiles);

int returnVal = exportChooser.showDialog(null, "Export");
if(returnVal == JFileChooser.APPROVE_OPTION){
    File[] files = exportChooser.getSelectedFiles(); 
......
}

其他一些代码...

try{
    BufferedWriter out = new BufferedWriter(new FileWriter(files[0]));
    writer.write(d, format, out);
    out.close();
    BufferedWriter md_out = new BufferedWriter(new FileWriter(files[1]));
    List<String> metadata = d.getAgilentMetadata();
    for(int i=0;i<metadata.size(); i++) {
        md_out.write(metadata.get(i));
        md_out.write("\n");
    }
    md_out.close();

}catch(Exception e){...}

提前谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,而不是尝试指定两个文件,而只是提示输入一个文件,然后将(扩展名和)元名称部分应用于该文件?

然后您可以做类似...

int returnVal = exportChooser.showDialog(null, "Export");
if (returnVal == JFileChooser.APPROVE_OPTION) {
    File file = exportChooser.getSelectedFile();
    File path = file.getParentFile();
    String name = file.getName();
    if (!name.toUpperCase().endsWith(".txt")) {
        name += ".txt";
    }
    String metaName = name.substring(0, name.lastIndexOf("."));
    metaName += "_metadata.txt";

    File outputFile = new File(path, name);
    File metaFile = new File(path, metaName);
}

nb:您可能需要就如何处理现有的扩展名做出自己的决定,我只是要求以.txt

结尾

然后,您可以将内容写成类似...

try (BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) {
    // Write stuff...

    try (BufferedWriter metaBW = new BufferedWriter(new FileWriter(metaFile))) {
        // Write meta data
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

如果您必须能够分别选择元数据文件(对我而言这没有任何意义,因为那您如何将两个文件关联在一起?),则需要检查该文件返回的所选文件数。 JFileChooser并确认您具有预期/所需的文件数量