This question already has answers here:
How to handle ~ in file paths

(5 个回答)


6年前关闭。




这是我删除文件夹的代码,下面的代码不会删除主文件夹下的下载目录。
import java.io.IOException;
public class tester1{
        public static void main(String[] args) throws IOException {
        System.out.println("here going to delete stuff..!!");
        Runtime.getRuntime().exec("rm -rf ~/Downloads/2");
        //deleteFile();
        System.out.println("Deleted ..!!");     }
}

但是,如果我提供完整的主路径,则此方法有效:
   import java.io.IOException;
    public class tester1{
            public static void main(String[] args) throws IOException {
            System.out.println("here going to delete stuff..!!");
            Runtime.getRuntime().exec("rm -rf /home/rah/Downloads/2");
            //deleteFile();
            System.out.println("Deleted ..!!");
        }
        }

谁能告诉我我做错了什么。?

最佳答案

波浪号 ( ~ ) 由 shell 展开。当您调用 exec 时,不会调用 shell,而是立即调用 rm 二进制文件,因此不会扩展波浪号。通配符和环境变量也不是。

有两种解决方案。要么像这样自己替换波浪号:

String path = "~/Downloads/2".replace("~", System.getProperty("user.home"))

或通过像这样为命令行添加前缀来调用 shell
Runtime.getRuntime().exec("sh -c rm -rf ~/Downloads/2");

关于java - rm -rf 不适用于 Java 运行时中的 home 波浪号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26859490/

10-12 02:01