1

我目前正在构建一个应用程序,我希望将整个目录导入另一个目录。我正在使用您需要导入 jar 文件的 apache commons.io 库。

假设从我将使用来自 GuiBuilder Netbeans 的 JfileChooser 选择到 C:\output 的目录中。我希望将所有图像都导入那里。我的代码没有运行。当我按下 JButton2 (负责加载目录的按钮时,我得到一个异常

WebAppImg.jButton2ActionPerformed(WebAppImg.java:141) 处的线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常(第二行指出:String filename = f.getAbsolutePath();)

copyDirectoryToDirectory 方法可能。但是我对此的想法是,当将 FileSelectionMode 设置为 Directories_Only 时,绝对路径将类似于 C:\importFile 而不是 C:\importFile\image1.jpg,因此不会出错。但也许这是个错误?

到目前为止,这是我的代码。

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:(for importing a whole directory(folder) from C:\images1 into C:\output ).        
    JFileChooser chooser = new JFileChooser();
    chooser = new JFileChooser(); 
    //chooser.setCurrentDirectory(new java.io.File("."));
    //chooser.setDialogTitle(choosertitle);
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    //chooser.showOpenDialog(null);
    //chooser.setAcceptAllFileFilterUsed(false);

    File f = chooser.getSelectedFile();

    String filename = f.getAbsolutePath();
try {

    File srcDir = new File(filename);
    File destDir = new File("C:/output/");

    FileUtils.copyDirectoryToDirectory(srcDir, destDir);

}
    catch (Exception ex) {
    ex.printStackTrace();
}
}                
4

2 回答 2

1

我相信你没有使用正确的FileUtils方法。请尝试使用copyDirectory(File srcDir, File destDir);

更新

如果要复制 src 目录中的所有文件,请使用上述方法。如果要复制目录,请说将C:\images导致,因为它将整个目录复制到另一个目录中。C:\COPIEDcopyDirectoryToDirectory(File srcDir, File destDir);C:\COPIED\images

这是我的工作示例...

private void jFileChooser1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
  File src =  jFileChooser1.getSelectedFile();
  File dest = new File("C:\\COPIED");
    System.out.println(src.getAbsolutePath());
    System.out.println(dest.getAbsolutePath());
    try {
        FileUtils.copyDirectory(src, dest);
        //FileUtils.copyDirectoryToDirectory(src, dest);
    } catch (IOException ex) {
        Logger.getLogger(FileChoosingFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
} 

这是一个工作示例:stackoverflow-jchooser.zip它应该仅用作起点。复制应该在单独的线程而不是 EDT 中完成。

于 2013-01-07T13:47:44.383 回答
0

尝试这个。

 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    JFileChooser chooser = new JFileChooser();
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    chooser.showOpenDialog(null);
    File f = chooser.getSelectedFile();
    String SourceDir = f.getAbsolutePath();
try {

    File srcDir = new File(SourceDir);
    File destDir = new File("C:/output/");

    FileUtils.copyDirectoryToDirectory(srcDir, destDir);

}
    catch (Exception ex) {
    ex.printStackTrace();
}
}                
于 2013-01-07T17:25:01.617 回答