簡體   English   中英

為何運行該文件時,除非我在Jar所在的文件夾中,否則為什么我無法訪問其文件?

[英]Why can't I access a file within my jar unless I'm in the folder with the Jar when I run it?

我最近創建了一個應用程序,並將其成功地添加到c:/my/folder/app.jar。 在以下情況下[啟動#1],它的工作原理像一種魅力:

  • 打開cmd
  • cd到c:/ my / folder
  • java -jar app.jar

但是當我這樣做時,它不起作用[啟動#2]:

  • 打開cmd
  • cd到c:/ my /
  • java -jar文件夾/app.jar

因為app.jar包含一個.exe文件,我試圖在我的應用程序中運行它:

final Process p = Runtime.getRuntime().exec("rybka.exe");

由於找不到文件rybka.exe,因此無法在示例2中運行。

有什么建議么?

這樣的事情是更好的前進方式。 將exe從jar中復制到臨時位置,然后從那里運行它。 然后,您的jar也可以通過webstart等執行:

InputStream src = MyClass.class.getResource("rybka.exe").openStream();
File exeTempFile = File.createTempFile("rybka", ".exe");
FileOutputStream out = new FileOutputStream(exeTempFile);
byte[] temp = new byte[32768];
int rc;
while((rc = src.read(temp)) > 0)
    out.write(temp, 0, rc);
src.close();
out.close();
exeTempFile.deleteOnExit();
Runtime.getRuntime().exec(exeTempFile.toString());

如果jar始終位於該目錄中,則可以使用完整路徑/my/folder/rybka.exe 如果不是,則可以使用getClass().getProtectionDomain().getCodeSource().getLocation()來找出jar的位置,並將其放在rybka.exe

嘗試將exe解壓縮到

System.getProperty("java.io.tmpdir"));

然后從該位置運行它也應該每次都能工作。

保羅

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM