我正在研究一个项目,其中的一部分必须在一些带有标记文本的原始文件中搜索单词。为此,我试图使用“ 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”:
感谢您的时间。
编辑: 好的,这很奇怪。 正如您在评论中所看到的,我创建了一个新项目,以便可以更好地测试事情以及发生一些奇怪的事情。 现在,我在项目的根文件夹和项目的src文件夹中都有aux_string.txt,results.txt和spanishEtiquetado文件。 作为代码,我一直在测试两个选项: 首先,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();
如果执行第一个,则该命令将处理位于根文件夹中的文件,从而用所需的结果修改根文件夹中的result.txt文件。
现在,如果我使用旧代码,则会发生目录更改,并在src文件夹中写入了results.txt,但它为空,因为未读取其他必需文件,甚至未读取src文件夹之外的文件。 我不知道发生了什么,也没有任何帮助。
答案 0 :(得分:0)
也许尝试一下。只是执行外部过程的另一种方式。
Runtime.getRuntime().exec("cmd /c findstr /g:" + filename + " spanishEtiquetado* >results.txt");
将try块替换为该块以进行测试。