我有一个用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){...}
提前谢谢!
答案 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
并确认您具有预期/所需的文件数量