栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

java.lang.Runtime异常“无法运行程序”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java.lang.Runtime异常“无法运行程序”

Runtime.exec不使用外壳程序(例如

/bin/bash
);它将命令直接传递到操作系统。这意味着将不会理解通配符(例如)
*
和管道(
|
),因为
cat
(像所有Unix命令一样)不会对这些字符进行任何解析。您需要使用类似

p = new ProcessBuilder("bash", "-c", command).start();

或者,如果出于某些奇怪的原因,您需要坚持使用过时的Runtime.exec方法:

p = Runtime.getRuntime().exec(new String[] { "bash", "-c", command });

如果只运行cat / grep命令,则应考虑放弃使用外部进程,因为Java代码可以轻松地遍历目录,从每个文件中读取行并将它们与正则表达式匹配:

Pattern pattern = Pattern.compile("TEXT_TO_SEARCH");Charset charset = Charset.defaultCharset();long count = 0;try (DirectoryStream<Path> dir =    Files.newDirectoryStream(Paths.get("/home/talha"))) {    for (Path file : dir) {        count += Files.lines(file, charset).filter(pattern.asPredicate()).count();    }}

更新:
要递归读取树中的所有文件,请使用Files.walk:

try (Stream<Path> tree =    Files.walk(Paths.get("/home/talha")).filter(Files::isReadable)) {    Iterator<Path> i = tree.iterator();    while (i.hasNext()) {        Path file = i.next();        try (Stream<String> lines = Files.lines(file, charset)) { count += lines.filter(pattern.asPredicate()).count();        }    };}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号