【问题标题】:FileUtils.copyFile() crashes the program when trying to copy an exeFileUtils.copyFile() 在尝试复制 exe 时使程序崩溃
【发布时间】:2020-02-11 13:10:03
【问题描述】:

我已经尝试了很多不同的选项来复制 Java 中的文件,但都没有奏效。当我认为我发现真正的问题时,我使用的是 FileUtils。这是代码

        public void createUSBButtonAction() throws IOException {

                for(Object obj: programList.getItems()){

                    File src = new File("C:\\Users\\JohnsonL\\Desktop\\flashTranserProj\\flashTransferProj\\src\\sample\\Installers\\" + obj.toString());
                    File dst = new File("D:/Test/" + obj.toString());
                    System.out.println(dst.getUsableSpace());
                    FileUtils.copyFile(src, dst);
            }

在我复制一个 exe 文件之前它工作正常。当我这样做时,程序停止响应并出现提示说 JDK 停止工作并且没有给我任何错误。

如果我必须切换到另一种形式的文件复制,我会,但我想坚持使用 FileUtils

【问题讨论】:

  • 您的 AV 可能会干扰副本。
  • 做适当的异常处理,看看你得到了什么错误。为什么我们在将字段复制到目标位置之前执行 dst.getUsableSpace()?
  • 抱歉 dst.getUsableSpace() 是之前的东西。它在抛出任何异常之前就崩溃了。
  • 如果 JVM 崩溃,应该有一个可以调查的崩溃/转储文件。

标签: java fileutils


【解决方案1】:

这很可能是由您的操作系统引起的,因为您使用的是 Windows。可能是防病毒或系统策略阻止将可执行文件复制到D:\ 路径。

FileUtils.copyFile() 只是一个复制操作,在底层通常使用FileChannel。它不会根据文件的扩展名或类型对文件进行不同的处理,因为它只读取和写入字节。

【讨论】:

    【解决方案2】:

    文件复制时间过长,因此它正在停止程序的其余部分来复制文件。我通过在另一个线程上复制文件来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多