繁体   English   中英

使用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结尾

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

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返回的所选文件数并进行验证您具有预期/所需的文件数

暂无
暂无

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

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