使用 JFileChooser 输出多个文件

Output Multiple Files with 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){...}

提前致谢!

好吧,与其尝试指定两个文件,不如只提示一个文件,然后将(扩展名和)元名称部分应用于它?

然后你可以做类似...

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[=14 结尾=]

然后你就可以把内容写成类似...

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();
}

如果,你必须能够 select 单独的元数据文件(这对我来说没有意义,因为你如何将两个文件关联在一起?),你需要检查数字由 JFileChooser 返回的 selected 个文件,并确认您拥有 expected/required 个文件