的ProcessBuilder给人一种“找不到文件”异常,当文件确实存在[复制](ProcessBu

2019-07-19 14:44发布

这个问题已经在这里有一个答案:

  • 的ProcessBuilder提供了在Mac上一个“没有这样的文件或目录”,而运行时()。EXEC()工作正常 1个回答

工作将在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();
    }
}

和异常

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 /家庭/根/ multicraft /服务器工作完全正常。

我也试过:

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

Answer 1:

所述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*"...);


Answer 2:

    try {
        ProcessBuilder probuilder = new ProcessBuilder("<Absolute Path To>/find /home/root/multicraft/servers/ -name '*.log' -delete");
        probuilder.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

<Absolute Path To>理想地应当/ bin中或/ usr / bin中

ProcessBuilder probuilder = new ProcessBuilder("find /home/root/multicraft/servers/ -name '*Backup*' -delete");
probuilder.directory(new File("<Absolute Path To>"));
probuilder.start();

probuilder.directory希望工作目录下find



文章来源: ProcessBuilder giving a “File not found” exception when the file does exist [duplicate]