2016-04-26 5 views
0

Я новичок в JavaFx, мне интересно, как скопировать файл, уже выбранный Filechooser в мою папку проекта.Скопировать выбранный файл в каталог проекта

public void ButtonAction(ActionEvent event) { 
    FileChooser fc = new FileChooser(); 
    fc.setTitle("attach a file"); 
    File selectedFile = fc.showOpenDialog(null); 

    if (selectedFile != null) { 
     file1.setText("selectionned file : " + selectedFile.getAbsolutePath()); 

     //the code to copy the selected file goes here// 

    } else{ 
     file1.setText("no file attached"); 
    } 

ответ

1

Вы можете использовать Files класс для копирования файлов, например .:

Files.copy(selectedFile.toPath, targetDirPath); 
1

проблема решена благодаря так или иначе.

Path from = Paths.get(selectedFile.toURI()); 
     Path to = Paths.get("pathdest\\file.exe"); 
     CopyOption[] options = new CopyOption[]{ 
       StandardCopyOption.REPLACE_EXISTING, 
       StandardCopyOption.COPY_ATTRIBUTES 
     }; 
     Files.copy(from, to, options); 
0

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

private Path to; 
private Path from; 
private File selectedFile; 

private void handleFileLocationSearcher() throws IOException { 
    FileChooser fc = new FileChooser(); 
    fc.setTitle("Attach a file"); 
    selectedFile = fc.showOpenDialog(null); 

    if (selectedFile != null) { 
     from = Paths.get(selectedFile.toURI()); 
     to = Paths.get("Your destination path" + selectedFile.getName()); 
     Files.copy(from.toFile(), to.toFile()); 
    } 
} 

Вы можете использовать selectedFile.toString() или selectedFile.getName(), чтобы добавить его в текстовое поле или просто получить путь или имя файла, который вы пытаетесь извлечь через File Chooser.

Вы также можете использовать Files.copy(from.toFile(), to.toFile()); в другом месте приложения, если хотите, чтобы это произошло на другой кнопке, потому что переменные могут использоваться в любом месте класса. Если вам не нужно это делать, просто создайте локальные переменные в методе.