Загрузчик нескольких файлов Java

Я создал программу для загрузки изображений с одного устройства на другое. В настоящее время программа позволяет пользователю загружать только один файл за раз. Если бы я хотел отредактировать программу, чтобы пользователь мог загружать несколько файлов одновременно, как лучше всего это сделать.

String source1 = source.getSelectedFile().getPath();
System.out.println("Source1: " + source1);
String nwdir1 = nwdir.getSelectedFile().getPath() + "\\" + filename;
System.out.println("nwdir1: " + nwdir1);

Path source = Paths.get(source1);
Path nwdir = Paths.get(nwdir1);

try {
    Files.copy(source, nwdir);

Я заметил, что вы можете сделать .getSelectedFiles(), но поскольку это не позволяет .getPath(), я не знаю, как продолжить. Предполагая, что вы можете сделать это:

File[] source1 = source.getSelectedFiles();

Как бы я сделал вторую строку:

String nwdir1 = nwdir.getSelectedFile().getPath() + "\\" + filename;

Когда я заменяю строку массивом файлов (показано выше), я получаю сообщение об ошибке в строках:

Path source = Paths.get(source1);
Path nwdir = Paths.get(nwdir1);

person Adam Hinx    schedule 13.08.2012    source источник
comment
Почему бы вам просто не позволить пользователю указать несколько файлов, а затем загрузить их все сразу?   -  person Roddy of the Frozen Peas    schedule 13.08.2012
comment
Это была идея. Но я не уверен на 100%, как это сделать. На данный момент он загружает каталог, но позволяет пользователю выбрать только один файл.   -  person Adam Hinx    schedule 13.08.2012


Ответы (2)


File.listFiles или Файл. списокФайлов(ФайлФильтр)

Выбор нескольких файлов

Извините, это то, что я думал, вы хотели, но вы используете JFileChooser для выбора каталога, поэтому я предположил, что вы хотите сделать список каталогов: P

Установите JFileChooser, чтобы разрешить множественный выбор, используя setMultiSelectionEnabeld. Вы, вероятно, захотите установить режим выбора файлов на JFileChooser.FILES_ONLY или JFileChooser.FILES_AND_DIRECTORIES, если вы все еще хотите, чтобы они могли выбирать каталоги.

Возможно, вы также захотите установить файловый фильтр, чтобы позволить диалоговому окну фильтровать содержимое каталогов, ограничивая то, что пользователь может выбрать. Для простоты взгляните на FileNameExtensionFilter

ОБНОВЛЕНО

JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(true);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Images", "png", "jpg", "jpeg");
chooser.setFileFilter(filter);

switch (chooser.showOpenDialog(null)) {

    case JFileChooser.APPROVE_OPTION:

        String currentPath = chooser.getCurrentDirectory().getPath();
        File[] files = chooser.getSelectedFiles();

        if (files.length > 0) {

            System.out.println("You have choosen " + files.length + " from " + currentPath);

        } else {

            System.out.println("You didn't selected anything");

        }

        break;

}
person MadProgrammer    schedule 13.08.2012
comment
Не могли бы вы показать мне пример этой работы? Просто пытаюсь закодировать это сейчас. Кажется, все, что нужно сделать, это перечислить файлы в каталоге? Мне удалось закодировать его, чтобы показать список файлов в каталоге. Я просто не уверен, как пользователь может выбирать определенные файлы. - person Adam Hinx; 13.08.2012
comment
Спасибо за быстрый ответ. Я добавил строку source.setMultiSelectionEnabled(true); Это позволяет мне выбрать несколько файлов, но отправляется только один? Я посмотрел, но не могу разобраться. - person Adam Hinx; 14.08.2012
comment
@AdamHinx Используйте getSelectedFiles() вместо getSelectedFile(), он вернет массив выбранных файлов. - person MadProgrammer; 14.08.2012
comment
Хм. У меня это уже было. Все еще копирует только одно изображение. Я отредактировал исходный пост с исходным кодом. Пожалуйста, обратите внимание, что я знаю, что бросок не лучший способ сделать это. Код почищу позже. Спасибо за помощь. - person Adam Hinx; 14.08.2012
comment
@AdamHinx нигде в вашем коде, похоже, не используется getSelectedFiles (а не s в конце). Вы используете только метод getSelectedFile. Первый возвращает массив File, другой возвращает один File. - person MadProgrammer; 14.08.2012
comment
Я изменил его, но в нескольких строках были ошибки. Строковый путь = source.getSelectedFiles().getPath(); Файл[] файл = source.getSelectedFiles(); имя файла = источник.getName(файл); - person Adam Hinx; 14.08.2012
comment
@AdamHinx getSelectedFiles() возвращает МАССИВ из File. Вы не можете просто запросить путь, потому что у массива нет этого метода. Если вы действительно хотите узнать текущий путь, используйте вместо этого JFileChooser.getCurrentDirectory()! - person MadProgrammer; 14.08.2012
comment
Причина для .getPath заключается в том, чтобы вернуть строку - person Adam Hinx; 14.08.2012
comment
source.getCurrentDirectory().getPath() вы можете использовать массив файлов, но это просто проще. - person MadProgrammer; 14.08.2012
comment
Спасибо за вашего пациента MadProgrammer. Я новичок в программировании. Я отредактировал свой исходный вопрос, чтобы обновить, где я нахожусь. Я не думал, что будет так сложно создать такую ​​функцию. - person Adam Hinx; 14.08.2012
comment
@AdamHinx Я обновил свой пример простым примером того, чего вы, кажется, пытаетесь достичь. - person MadProgrammer; 14.08.2012
comment
Безумный программист, в этом гораздо больше смысла. Спасибо за ваше время. - person Adam Hinx; 14.08.2012
comment
@AdamHinx Изображение рисует тысячу слов ;) - person MadProgrammer; 14.08.2012
comment
MadProgrammer, я внимательно изучил программу, которую ты вставил вчера. Моя программа уже позволяет мне выбрать более одного файла, моя программа его отправляет. Как и прежде, я использую Files.copy(source, nwdir). Но поскольку источник теперь представляет собой массив, он не будет его поддерживать? - person Adam Hinx; 14.08.2012
comment
@AdamHinx у вас есть выбор, вам нужно либо обновить код копирования файла для работы с массивами, либо вызвать метод несколько раз из цикла - person MadProgrammer; 14.08.2012

Используйте FileUtils из библиотеки Apache Commons. Очень мощный и полезный. Вы даже можете указать, какие форматы файлов вы хотите скопировать и т. д.

person Naidu Ypvs    schedule 13.08.2012