exec, проблема с расположением файлов - PullRequest
0 голосов
/ 09 сентября 2011

В моем jar-приложении я делаю некоторые вычисления в exe-программе.Когда файлы и 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 создаются в моей jar-программе перед запуском program.exe.

edit:
Когда проблема началась, я пытаюсь что-то вроде этого: имена по умолчанию file1.txt и file2.txt, я изменил на aaa.txt и bbb.txt (в windows), а затем:

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

и это работает.

edit2:
Теперь я знаю, что проблема в программе.exe.Когда я использую его из командной строки (не из jar), вот так:

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

error:

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

, это также работает!Так это баг Фанн Либ?

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

Я бы использовал API ProcessBuilder (он дает вам гораздо больше контроля, чем 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();
0 голосов
/ 13 сентября 2011

Вы пробовали относительный путь для поиска местоположения, например
abc (folder)<br> -> code(folder)<br> -->Program.Java<br> -> temp<br> --> file1.txt<br> , поэтому
когда вы запускаете программу в Eclipse IDE
ваш относительный путь будет из файла program.java
../temp/file1.txt И попробуйте использовать / вместо \, чтобы он не воспринимался как escape-символ.
при запуске из банки Вам нужно извлечь временную папку из банки наружу
abc (folder)<br> -> jar (folder)<br> -->Program.jar<br> <strong>-> temp<br> --> file1.txt<br></strong>

ИЛИ
ЧитатьJAR-содержимое из программы в виде ZIP-файла.Получите временную папку внутри нее по коду и затем прочитайте содержимое как поток ввода.

0 голосов
/ 09 сентября 2011

Укажите полный путь к имени файла и посмотрите.Пример ниже

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

Если ваша ОС основана на UNIX, измените ее соответствующим образом.

...