使用 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 个文件
我在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 个文件