Вывод нескольких файлов с помощью JFileChooser - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть программное обеспечение, встроенное в 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 голосов
/ 02 ноября 2018

Что ж, вместо того, чтобы пытаться указать два файла, а просто запросить один и затем применить к нему часть (расширение и) мета-имя?

Тогда вы могли бы сделать что-то вроде ...

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

Примечание: вам может потребоваться принять собственное решение о том, как обрабатывать возможные существующие расширения, я просто поставил требование закончить .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 и убедитесь, что у вас есть ожидаемое / требуемое количество файлов

...