processbuilder findstr在Java中不工作,如何修复它?
我正在做一个项目,其中的一部分必须在一些原始文件的标记文本中搜索单词。为此,我尝试使用“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:标记后面的单词,然后在以“SpanishTiquetado”开头的所有文件中搜索该单词。最后,应将结果写入文件“results.txt”:
谢谢你抽出时间
编辑: 好吧,这很奇怪。 正如你在评论中所读到的,我创建了一个新项目,这样我可以更好地测试事情,并且发生了一些奇怪的事情。 现在,我有辅助线。txt,结果。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();
如果执行第一个命令,则该命令将处理根文件夹中的文件,从而处理结果。根文件夹中的txt文件将根据所需结果进行修改
现在,如果我使用我的旧代码,就会发生目录更改,并产生一个结果。txt写在src文件夹中,但它是空的,因为没有读取其他必需的文件,甚至没有读取src文件夹之外的文件。 我不知道发生了什么事,感谢你的帮助
# 1 楼答案
也许试试这个。只是另一种执行外部进程的方式
用测试用的试块替换你的试块