findstr не работает в Java, как это исправить? - PullRequest
1 голос
/ 03 июля 2019

Я работаю над проектом, и часть его должна искать слова в некоторых необработанных файлах тегового текста. Для этого я пытаюсь использовать функцию "findstr", но это доставляет мне много хлопот. Файл содержит текст на испанском языке, поэтому для работы со специальными символами мне нужно использовать функцию «findstr» с некоторыми опциями. Я пытаюсь запустить команду из ProccesBuilder и класса Process, но ничего не происходит.

Я подозревал, что, возможно, была проблема с фактическим рабочим каталогом, поэтому я изменил его в объекте ProcessBuilder, который у меня есть, но без результатов.

private static void findWordData(String filename){

   try{
       String procs = "findstr /g:" + filename + " spanishEtiquetado* >results.txt"; 
       ProcessBuilder proBuild = new ProcessBuilder();
       proBuild.command("cmd.exe","/c",procs);
       proBuild.directory(new File("resources/TextData/SPA/"));
       Process p= proBuild.start();
   } catch (IOException e) {
        System.out.println("exception happened - here's what I know: ");
        e.printStackTrace();
        System.exit(-1);
    }
}

Ожидаемый результат заключается в том, что команда читает слово в файле после тега / g: и затем ищет его во всех файлах, которые начинаются с "spanishEtiquetado". Наконец, результаты должны быть записаны в файл "results.txt":

Спасибо за ваше время.

EDIT: Хорошо, это странно. Как вы можете прочитать в комментариях, я создал новый проект, чтобы я мог лучше тестировать вещи и что-то странное. Прямо сейчас у меня есть файлы aux_string.txt, results.txt и файл spanishEtiquetado как в корневой папке проекта, так и в папке src проекта. В качестве кода я тестировал два варианта: Во-первых, тот, который SuperMario48 опубликовал немного измененным:

Runtime.getRuntime().exec("cmd /c findstr /g:aux_strings.txt spanishEtiquetado* >results.txt");

Второй - тот, который я использовал раньше:

String procs = "findstr /g:" + filename + " spanishEtiquetado* >results.txt";
ProcessBuilder proBuild = new ProcessBuilder();
proBuild.directory(new File("src/"));
proBuild.command("cmd.exe", "/c", procs);
Process p = proBuild.start();

Если выполняется первый файл, файлы, находящиеся в корневой папке, обрабатываются командой, и, таким образом, файл results.txt в корневой папке изменяется с требуемыми результатами.

Теперь, если я использую свой старый код, произойдет смена каталога, и файл results.txt будет записан в папке src, но он пуст, потому что другие необходимые файлы не читаются, даже те, которые находятся вне папки src. Я не имею ни малейшего представления о том, что происходит, любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 июля 2019

Может быть попробовать это.Просто еще один вид выполнения внешнего процесса.

Runtime.getRuntime().exec("cmd /c findstr /g:" + filename + " spanishEtiquetado* >results.txt");

Замените ваш блок try на этот, чтобы протестировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...