尽管不是很漂亮,但我还是通过在启动我的应用程序之前将dir / ls的输出传递到文件中并传入文件名来解决此类问题。
如果您需要在应用程序中执行此 *** 作,则可以只使用system.exec(),但这会带来一些麻烦。
你问。第一种形式将非常快,第二种形式也将非常快。
确保对每行执行一项(裸露,无装饰,无图形),所选命令的完整路径和递归选项。
编辑:
仅仅30分钟就可以得到目录清单,哇。
令我惊讶的是,如果使用exec(),则可以将其标准输出重定向到管道中,而不是将其写入文件中。
如果这样做,则应立即开始获取文件,并能够在命令完成之前开始处理。
交互实际上可能会使事情变慢,但可能不会—您可以尝试一下。
哇,我只是为您找到.exec命令的语法,并偶然发现了它,可能正是您想要的(它使用exec和“
ls”列出了一个目录,并将结果通过管道传递到您的程序中进行处理):
好的链接在回溯中(Jörg在评论中提供了从Oracle打破的Sun
替代此)
无论如何,这个想法很简单,但是正确编写代码却很烦人。我会去窃取互联网上的一些代码,然后将它们破解-brb
/ ** *注意:仅将此作为最后的选择!它特定于Windows,甚至 *这不是一个好的解决方案,但是应该很快。 * *要使用它,扩展FileProcessor并使用列表调用processFiles(“ ...”) *选项,如果您希望它们像/ s ...我强烈建议/ b * *覆盖processFile,它将为输出的每一行调用一次。 * /导入java.io. *;公共抽象类FileProcessor{ 公共无效processFiles(String dirOptions) { 处理theProcess = null; BufferedReader inStream = null; //调用Hello类 尝试 { theProcess = Runtime.getRuntime()。exec(“ cmd / c dir” + dirOptions); } catch(IOException e) { System.err.println(“ exec()方法错误”); e.printStackTrace(); } //从被调用程序的标准输出流中读取 尝试 { inStream = new BufferedReader( 新的InputStreamReader(theProcess.getInputStream()));processFile(inStream.readLine()); } catch(IOException e) { System.err.println(“ inStream.readLine()发生错误”); e.printStackTrace(); } } //结束方法 / **覆盖此方法-每个文件将被调用一次* / 公共抽象无效processFile(String filename);} //结束类
谢谢IBM的代码捐助者
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)