2012-06-28 3 views
0

Я хочу запустить сценарий оболочки из java-программы. Этот сценарий оболочки вызывает системную библиотеку, для которой нужен большой файл в качестве ресурса.shell процесс java synchronization

Моя программа java вызывает этот скрипт для каждого слова в документе. Если я снова и снова вызываю этот сценарий с помощью Runtime.exec(), то время, затраченное на загрузку, очень велико, так как загрузка ресурса занимает много времени.

Чтобы преодолеть это, я думал о написании сценария оболочки следующим образом (чтобы непрерывно работать в фоновом режиме):


count=0 

while count -lt 10 ; do 

    read WORD 

    //execute command on this line 

done 

Мне нужно получить вывод команды в моей Java программы и обрабатывать ее дальше. Как я должен кодировать операции ввода-вывода для выполнения этой задачи?

Я пробовал записывать слова в выходной поток процесса и считывать выходные данные из входного потока процесса. Но это не сработает и выбрасывает прерывистую трубку.


try { 

    parseResult = Runtime.getRuntime().exec(parseCommand); 

    parsingResultsReader = new BufferedReader(new InputStreamReader (parseResult.getInputStream())); 

    errorReader = new BufferedReader(new InputStreamReader (parseResult.getErrorStream())); 

    parseResultsWriter = new BufferedWriter(new OutputStreamWriter((parseResult.getOutputStream()))); 

} catch (IOException e) { 

      e.printStackTrace(); 

} 

parseResultsWriter.write(word); 

parseResultsWriter.flush(); 

while ((line = parsingResultsReader.readLine()) != null) { 

    // capture output in list here 

} 

Пожалуйста, помогите с этим вопросом

+0

Должен ли процесс «оболочки» быть независимым от виртуальной машины, или VM может начать его самостоятельно? – Romain

ответ

0
//execute command on this line 

Является ли эта команда отдельная программа? Затем он будет запущен для каждого слова, поэтому вы избавитесь от всего процесса оболочки, который в любом случае будет легким. Вам нужно научиться запускать тяжелую команду для многих слов сразу.