【问题标题】:exec, files location problemexec,文件位置问题
【发布时间】:2011-09-09 13:13:44
【问题描述】:

在我的 jar 应用程序中,我在 exe 程序中进行了一些计算。当 files 和 program.exe 在同一个目录中时,我使用了这个命令:

String[] str={"program.exe", "file1.txt", "file2.txt"};
pr = rt.exec(str);

而且效果很好。但是当我将文件移动到其他目录并尝试使用此命令时:

String[] str={"program.exe", "temp\\file1.txt", "temp\\file2.txt"};
pr = rt.exec(str);

program.exe 看不到文件。更奇怪的是,当我将其名称更改为默认值时,它开始看到文件。 file1.txt、file2.txt 和 temp 是在 program.exe 启动之前在我的 jar 程序中创建的。

编辑:
当问题开始时,我尝试这样:默认名称 file1.txt 和 file2.txt,我更改为 aaa.txt 和 bbb.txt(在 Windows 中),然后:

 String[] str={"program.exe", "temp\\aaa.txt", "temp\\bbb.txt"};

它有效。

edit2:
现在我知道问题出在 program.exe 中。当我从命令行(而不是 jar)使用它时,像这样:

program.exe temp\file1.txt temp\file2.txt 

错误:

FANN Error 1: Unable to open configuration file "temp\file1.txtÉ║@" for reading.

fann 是人工神经网络库。当我将文件复制到 program.exe 目录时:

program.exe file1.txt file2.txt 

有效!当我在 temp 中更改文件名并执行以下操作时:

program.exe temp\file1aaa.txt temp\file2bbb.txt

它也有效!所以它是 fann lib 错误?

【问题讨论】:

  • 这里的“本地化问题”是什么。
  • 您所说的“其他任何默认设置...”是什么意思?
  • @sudmong,将其更改为“位置”,这就是我认为的意思。
  • program.exe 在命令行中运行时是否看到其他目录中的文件?
  • 临时目录在你运行程序的目录里面吗?

标签: java file-io command-line runtime.exec


【解决方案1】:

我会使用 ProcessBuilder api(它为您提供比 Runtime.exec() 更多的控制权)并且我还会使用绝对路径:

File directory = new File("/path/tp/program.exe's/parent");

int returnCode = new ProcessBuilder("program.exe", 
    new File(directory, "temp/file1.txt").getAbsolutePath(),
    new File(directory, "temp/file2.txt").getAbsolutePath()
)
.directory(directory).start().waitFor();

【讨论】:

    【解决方案2】:

    给出文件名的完整路径并查看。如下所示

    String[] str = {"program.exe", "D:\\temp\\file1.txt", "D:\\temp\\file2.txt"}; 
    

    如果您的操作系统是基于 UNIX 的,那么请进行相应的更改。

    【讨论】:

    • 它没有帮助,我的操作系统赢了
    【解决方案3】:

    您是否尝试过相对路径来查找位置 喜欢
    abc (folder)
     -> code(folder)
      -->Program.Java
     -> temp
      --> file1.txt
    所以
    当你在 Eclipse IDE 中运行你的程序时
    你的相对路径将来自 program.java 文件是
    ../temp/file1.txt 并尝试使用/ 而不是\,这样它就不会作为转义字符。
    当你从罐子里跑出来时 您需要将临时文件夹从 jar 提取到外部
    abc (folder)
     -> jar (folder)
      -->Program.jar
     -> temp
      --> file1.txt


    从程序中读取 jar 内容作为 zip 文件。通过代码到达其中的临时文件夹,然后将内容作为输入流读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2021-06-12
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多