目录不为空 java.io.IOException

Directory not empty java.io.IOException

我需要从我的 JavaFX 应用程序启动一个名为 TeamViewer 的外部应用程序。 所以我有 TeamViewer.app 文件,我正在将其复制到一个临时文件夹并使用以下命令启动它:

Runtime.getRuntime().exec("open /path/to/Teamviewer.app");

但这是抛出 Directory not empty IOException。
我还尝试使用 shell 文件启动,我在其中将 "open /path/to/Teamviewer.app" 命令写入 launch.sh 并使用 ProcessBuilder 创建的进程启动 launch.sh。
如果我从终端 运行 launch.sh,它就可以工作。但是从 java 程序中, 抛出以下异常:

SEVERE: null
java.io.IOException: Cannot run program "sh" (in directory "/Applications/ColorDx.app/Contents/Java"): error=66, Directory not empty
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
    at com.sc.colordx.controller.ColorDxSupportController.executeCommand(ColorDxSupportController.java:288)
    at com.sc.colordx.controller.ColorDxSupportController.launchSetup(ColorDxSupportController.java:126)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

目录非空异常是什么原因?它必须是非空的,因为我在那里复制了 TeamViewer.app。
这可能是多线程问题吗?意味着我首先复制 TeamViewer.app 并立即启动它。是否有可能在复制完成之前调用启动命令?
TIA

正如我所怀疑的,运行时本身有问题!还有一个 JavaFX 应用程序充当此应用程序的安装程序(存在运行时问题的应用程序)。为了安装这个应用程序,我使用了以下代码来复制 .app 文件的内容:

public static final void copyFile( File source, File destination ) throws IOException {


                    FileChannel sourceChannel = new FileInputStream( source ).getChannel();
                    FileChannel targetChannel = new FileOutputStream( destination ).getChannel();
                    sourceChannel.transferTo(0, sourceChannel.size(), targetChannel);
                    sourceChannel.close();
                    targetChannel.close();
        }


上面的代码在复制时没有保留文件属性。用 Files.copy using COPY_ATTRIBUTES 选项替换上面的方法解决了问题。