Я работаю над проектом, и часть его должна искать слова в некоторых необработанных файлах тегового текста. Для этого я пытаюсь использовать функцию "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.
Я не имею ни малейшего представления о том, что происходит, любая помощь приветствуется.