Java Unix可执行文件在复制时更改为TextEdit文档
我有下面的脚本,你可以在下面看到。此Java脚本的功能是复制Mac应用程序,其中一个应用程序与Java程序放在同一文件夹中。它首先找到应用程序和java程序所在的文件夹的路径。然后,它将所有内容复制到Mac设备上的documents文件夹中。完成后,它应该运行已复制到documents文件夹的应用程序 唯一的问题是它无法做到这一点。原因是,每当它复制应用程序时,mac应用程序内容中的Java Unix可执行文件在复制时更改为TextEdit文档,java,macos,copy,executable,apache-commons,Java,Macos,Copy,Executable,Apache Commons,我有下面的脚本,你可以在下面看到。此Java脚本的功能是复制Mac应用程序,其中一个应用程序与Java程序放在同一文件夹中。它首先找到应用程序和java程序所在的文件夹的路径。然后,它将所有内容复制到Mac设备上的documents文件夹中。完成后,它应该运行已复制到documents文件夹的应用程序 唯一的问题是它无法做到这一点。原因是,每当它复制应用程序时,mac应用程序内容中的JavaAppLauncher已从unix可执行文件更改为常规文本编辑文档,因此无法实际启动应用程序。但是,如果我
JavaAppLauncher
已从unix可执行文件更改为常规文本编辑文档,因此无法实际启动应用程序。但是,如果我通过自己复制应用程序而不是使用java程序来手动复制应用程序,那么就没有问题了。我不确定这个问题是由我的代码引起的,还是只是一个一般性的问题
重要提示:当我只运行常规的非复制版本时,.app确实可以工作,但一旦它是通过Java复制的复制版本,它就无法工作,因为Unix可执行文件的更改
public class LaunchProg {
static String usernameMac2 = System.getProperty("user.name");
static File propFile = new File (".");
static String pathString = propFile.getAbsolutePath();
static int pathhLeng = pathString.length();
static int pathReaLeng = pathhLeng -1;
static String filNamMac = "AppNam.app";
static String pFPathRelMac = pathString.substring(0,pathReaLeng);
private static final File fSourceMac = new File(pFPathRelMac);
private static final File AppFold = new File ("/Users/" + usernameMac2 + "/Documents");
static File fileCret = new File("fCret.txt");
public static void main(String[] args) throws IOException {
System.out.println(pFPathRelMac);
launchMac();
}
static void launchMac() throws IOException {
if (!fileCret.exists()){
try {
FileUtils.copyDirectory(fSourceMac, AppFold);
PrintWriter pFW = new PrintWriter(fileCret);
pFW.println("Created File For Check");
pFW.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
String command = "open /Users/" + usernameMac2 + "/Documents/AppNam.app";
Process staAp2 = Runtime.getRuntime().exec(command);
}
}
}
}
我怀疑
cp
命令复制权限,而您的复制功能没有。因此,该文件的副本没有“执行”权限。这就是它显示为文本编辑文档的原因,也是它无法运行的原因。尝试将“执行”权限添加到文件副本。@MikeNakis我很欣赏您的输入,我解决了这个问题,没有复制文件,只是移动了文件。使用以下命令