java.io.IOException: Cannot run program cat /home/talha/* | grep -c TEXT_TO_SEARCH": error=2, No such file or directory
尽管 通过终端执行相同的命令时没有问题 ,
但 我却遇到了类似执行以下命令时的异常情况 。 我需要执行并返回以下命令的输出:
cat /home/talha/* | grep -c TEXT_TO_SEARCH
这是使用Runtime
类执行命令的方法:
public static String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
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();
}
};
}
这是我的日志
E/AndroidRuntime:致命异常:main 进程:za.co.riggaroo.motioncamera,pid:17583 kotlin.typeCastException:null不能强制转换为非空类型kotlin.boolean(位于za.co.riggaroo.motioncamera.mainactivity$setuparmsystemtogle$2.ondatachange
从终端执行jar时,我得到以下信息: 我搜索了他的错误,发现了一些相同的执行输出错误,但没有解决我的情况。 下面详细介绍了文件的位置、清单内容、所采取的终端步骤以及所涉及的两个类文件的代码内容。 文件位置 > SWT库 舱单 班级 普通人。jar(参见下面的创建): Manifest.txt内容: 终端动作 > 目录更改 . jar创建 舱单检查 普通人。jar执行 密码 用户nterface.c
运行应用程序时的问题:在Consol屏幕中 java.lang.SecurityException:权限拒绝:starting Intent{act=Android.Intent.action.main cat=[Android.Intent.category.launcher]flg=0x10000000 cmp=com.test.sample/.setting}from null(PID=91
当我尝试用命令从终端运行sikuli时 java-jar sikuli-setup.jar
我在我的Android应用程序中面临奇怪的问题。它总是给我错误的名字 JAVAlang.RuntimeException:无法实例化应用程序io。日本动画。应用程序。应用程序:java。lang.ClassNotFoundException:在路径:DexPathList[[zip文件”//data/app/io.hitanime.app-957U27HR57arXVvYGSCFSQ==/base