我正在Java中执行Nmap,将网络信息保存到文件中。代码如下所示:Java,通过Nmap写入文件在大型网络上死机
Process p = Runtime.getRuntime().exec(new String[] {"nmap", "-O", "-oX", nmapFileLocation, ipStr+"/24"});
BufferedReader in = new BufferedReader( new InputStreamReader(p.getInputStream()));
String line = null; while ((line = in.readLine()) != null) {}
p.waitFor();
OutputStream os = p.getOutputStream(); os.flush();
os = p.getOutputStream(); os.flush();
看来我必须通过所有的线来读得到它的工作(我指的是while循环);这适用于较小的网络。我尝试了几种方式让它在大型网络上运行,但似乎挂起了。
例如,我正在运行执行nMap的Java应用程序。它已运行了半个小时,并挂在nmap代码行的位置。我观察过很多次,如果我打开它创建的文件,而Java应用程序正在运行,我只能看到新创建的文件中的前12行。但是,只要关闭Java应用程序,就可以看到所有〜1600行的文件。我愿意尝试不同的方法。
看看ProcessBuilder类。也许你忘了关闭某处的流。是不是也有你应该处理的ErrorStream? – HectorLector 2011-12-20 00:07:49
HectorLector是正确的。您还需要使用错误流。 [“调用Runtime.exec时捕获stdout”](http://stackoverflow.com/questions/882772/capturing-stdout-when-calling-runtime-exec)的答案可能会帮助你。 – creemama 2011-12-20 00:39:17