Java NetBeans GUI Builder—将整个图像目录添加到另一个特定目录,以便将图像导入其中

Java NetBeans GUI Builder—将整个图像目录添加到另一个特定目录,以便将图像导入其中,java,swing,user-interface,netbeans,Java,Swing,User Interface,Netbeans,我目前正在构建一个应用程序,希望将整个目录导入到另一个目录中。我正在使用ApacheCommons.io库,您需要导入一个jar文件 假设从一个目录,我将使用JfileChooser从GuiBuilder Netbeans选择到C:\output。我希望所有的图像都导入那里。我的代码没有运行。 当我按下JButton2(负责加载目录的按钮)时,我得到一个异常 线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 在WebAppImg.jB

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

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

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

copyDirectoryToDirectory方法。但我的想法是,当将FileSelectionMode设置为目录时,绝对路径应该类似于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();
}
}                

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

更新

如果要复制src目录中的所有文件,请使用上述方法。如果要将目录复制到
C:\images
C:\COPIED
copyDirectoryToDirectory(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);
    }
} 

这里有一个工作示例:它应该仅用作起点。复制应该在单独的线程中进行,而不是在EDT中进行。

我认为您没有使用正确的
FileUtils
方法。请尝试使用
copyDirectory(File srcDir,File destDir);

更新

如果要复制src目录中的所有文件,请使用上述方法。如果要将目录复制到
C:\images
C:\COPIED
copyDirectoryToDirectory(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);
    }
} 
下面是一个工作示例:它应该仅用作起点。复制应该在单独的线程中完成,而不是在EDT中完成。

试试这个

 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();
}
}                
试试这个

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

“显然,它在某些方面是错误的…”是吗?这怎么明显?你说的“它没有运行”是什么意思?它是否引发异常?然后给我们堆栈跟踪。感谢你的回复。当我按下JButton2(负责导入目录的按钮)时,线程“AWT-EventQueue-0”中出现异常WebAppImg.jButton2ActionPerformed(WebAppImg.java:141)WebAppImg.access$100(WebAppImg.java:20)WebAppImg$2.actionPerformed(WebAppImg.java:55)中的java.lang.NullPointerException这里有一个链接,可以从标准java库中帮助您,Gagandeep感谢您的帮助。问题是,正如它所说的,“可以复制目录。但是,目录中的文件不会被复制,因此即使原始目录包含文件,新目录也是空的。”我不希望这样。我希望目标目录(例如C:/output/)通过导入不断填充is空间。“显然,这在某些方面是错误的。”。。“是吗?这怎么明显?你说的“它没有运行”是什么意思?它引发了异常吗?然后给我们堆栈跟踪。谢谢你的回答。当我按下JButton2(负责导入目录的按钮)时,线程“AWT-EventQueue-0”中出现了异常”WebAppImg.jButton2ActionPerformed(WebAppImg.java:141)WebAppImg.access$100(WebAppImg.java:20)WebAppImg$2.actionPerformed(WebAppImg.java:55)中的java.lang.NullPointerException这里有一个链接,可以从标准java库中帮助您,Gagandeep感谢您的帮助。问题是,正如它所说的,“可以复制目录。但是,目录中的文件不会被复制,因此即使原始目录包含文件,新目录也是空的。”我不希望这样。我想要目标目录(例如C:/output/)通过导入不断填充空间。您好,John,谢谢您的帮助。我刚刚尝试了一下。它不起作用,因为我认为问题出在下面两行:File f=chooser.getSelectedFile();String filename=f.getAbsolutePath();我需要更改这些行,但我不知道我能做什么。我正在尝试这样做,但我遇到了一个问题John。如果我将源代码更改为固定代码(例如,C:\\images1),并为目标代码指定一个固定代码(我一直都是这样),它将非常有效!如果我将其替换为FileUtils.copyDirectory(src,dest);它在线程“AWT-EventQueue-0”java.lang.NullPointerException中返回一个异常:Source在该行不能为null!假设我有文件src=new File(“C:\\images1”);它可以工作!但是如果我有文件src=JFileChooser1.getSelectedFile();它给了我一个例外。你知道为什么吗?谢谢!我发送的代码工作得非常好。否则我就不会发布它了。也就是说,我试着选择了几个不同的目录,它复制了文件,没有问题。在我上传的项目中,你仍然需要确保commons io可用。它不是maven您是否尝试从命令行运行它以排除IDE?您应该能够运行ant直接从项目构建它,然后运行生成的jar。@GeorgeKourou看起来您正在jButton2ActionPerformed()中执行该代码