问题描述
使用将在Linux Web服务器上运行的应用程序来删除某个目录中的日志,但是我一直收到FileNotFound异常。
Working on an application that will run on a Linux web server to delete logs from a certain directory, however I keep getting a FileNotFound exception.
这是代码:
public static void deleteLOG() {
try {
ProcessBuilder probuilder = new ProcessBuilder("find /home/root/multicraft/servers/ -name '*.log' -delete");
probuilder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
异常
java.io.IOException: Cannot run program "find . -name '*CoreData*' -delete" (in directory "/home/root/multicraft/servers"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(Unknown Source)
at com.mcprohosting.com.nodecleanup.Preprocess.deleteCoreData(Preprocess.java:23)
at com.mcprohosting.com.nodecleanup.handlers.CleanupHandler.executeCleanup(CleanupHandler.java:36)
at com.mcprohosting.com.main.NodeCleaner.init(NodeCleaner.java:29)
at com.mcprohosting.com.main.NodeCleaner.main(NodeCleaner.java:25)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 5 more
然而命令cd / home / root / multicraft / servers工作得很好。
However the command cd /home/root/multicraft/servers works perfectly fine.
我也尝试过:
ProcessBuilder probuilder = new ProcessBuilder("find . -name '*Backup*' -delete");
probuilder.directory(new File("/home/root/multicraft/servers/"));
probuilder.start();
推荐答案
ProcessBuilder
构造函数接收多个字符串 - 作为 List< String>
或作为可变数量的参数,每个类型 String
:
The ProcessBuilder
constructor receives multiple strings - either as a List<String>
or as a variable number of arguments, each of type String
:
因为你通过了整个指挥官,你遇到了困难d作为一个字符串,导致JVM查找名为 find / home / root / multicraft / servers / -name'* .log'-delete
的程序,而不是 find
。
You're experiencing difficulties because you passed the entire command as one string, causing the JVM to look for a program called "find /home/root/multicraft/servers/ -name '*.log' -delete
", not find
.
您必须将长命令分成几部分。例如:
You'll have to separate the long command into parts. Such as:
ProcessBuilder pb = new ProcessBuilder("find", ".", "-name", "'*CoreData*"...);
这篇关于ProcessBuilder提供“未找到文件”文件存在时的异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!