findstr在Java中不起作用,如何解决?

时间:2019-07-03 17:53:09

标签: java processbuilder findstr

我正在研究一个项目,其中的一部分必须在一些带有标记文本的原始文件中搜索单词。为此,我试图使用“ 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文件夹之外的文件。 我不知道发生了什么,也没有任何帮助。

1 个答案:

答案 0 :(得分:0)

也许尝试一下。只是执行外部过程的另一种方式。

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

将try块替换为该块以进行测试。