当文件存在时,ProcessBuilder会发出"找不到文件"异常

Mat*_*ndi 5 java processbuilder

使用将在Linux Web服务器上运行的应用程序来删除某个目录中的日志,但是我不断收到FileNotFound异常.

这是代码:

public static void deleteLOG() {
    try {
        ProcessBuilder probuilder = new ProcessBuilder("find /home/root/multicraft/servers/ -name '*.log' -delete");
        probuilder.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

而且例外

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
Run Code Online (Sandbox Code Playgroud)

但是命令cd/home/root/multicraft/servers工作得很好.

我也尝试过:

    ProcessBuilder probuilder = new ProcessBuilder("find . -name '*Backup*' -delete");
    probuilder.directory(new File("/home/root/multicraft/servers/"));
    probuilder.start();
Run Code Online (Sandbox Code Playgroud)

Isa*_*aac 14

所述ProcessBuilder构造函数接收多个串-无论是作为一个List<String>或作为参数,每一种类型的可变数量String:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html#ProcessBuilder(java.util.List) http://docs.oracle.com/javase/1.5. 0 /文档/ API /爪哇/郎/ ProcessBuilder.html#的ProcessBuilder(java.lang.String中......)

因为你通过整个命令作为一个字符串,导致JVM寻找一个叫"节目您遇到困难find /home/root/multicraft/servers/ -name '*.log' -delete",而不是find.

你必须将长命令分成几部分.如:

ProcessBuilder pb = new ProcessBuilder("find", ".", "-name", "'*CoreData*"...);
Run Code Online (Sandbox Code Playgroud)