有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    也许试试这个。只是另一种执行外部进程的方式

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

    用测试用的试块替换你的试块