有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么是用户。dir可以设置为“.”?

在UNIX环境中,如果下面的命令显示该用户,可能会出现什么错误。目录设置为“.”

/home/user> $ANT_DIR/bin/ant -diagnostics | grep dir
user.dir : .

如果我在不同的计算机上运行此命令-用户。目录设置为当前目录:

/home/user2> $ANT_DIR/bin/ant -diagnostics | grep dir
user.dir : /home/user2

Java也不起作用

/home/user> java -cp .:$CLASSPATH test
Exception in thread "main" java.lang.NoClassDefFoundError: test
Caused by: java.lang.ClassNotFoundException: test
        at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:653)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
Could not find the main class: test.  Program will exit.

将当前目录添加到类路径

/home/user> java -cp /home/user:$CLASSPATH test
Hello World!

如您所见,java只有在添加当前目录时才找到测试类,而不是“.”,到类路径

据我所知,某些unix环境变量的值是错误的。但是什么样的环境变量呢


共 (2) 个答案

  1. # 1 楼答案

    以防万一:名为“user.dir”的系统属性应该指向当前工作目录,而不是用户主目录(请参见http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)。如果您想要用户主目录,请使用名为“user.home”的属性

    我的java测试程序:

    public class UserDirSystemProperty {
        public static void main(final String[] args) {
            System.out.println(System.getProperty("user.dir"));
        }
    }
    

    始终为我提供当前目录的绝对路径。我刚刚安装了ant(apache-ant-1.8.4),这里的输出也是一条绝对路径

    保存当前工作目录的唯一环境变量是PWD,但即使像这样修改PWD PWD=. ant -diagnostics | grep dir也不会改变什么,它仍然打印user.dir : /home/holger/Programming。所以这一定是环境以外的原因

    我的下一个猜测是权限:目录/home/user可能是NFS挂载,而运行ant的用户(一些放错位置的suid位?)没有访问此目录的权限。要测试这一点:做一个cd /tmp并再次运行ant -diagnostics

  2. # 2 楼答案

    怎么了?你想知道用户目录的绝对位置吗

    如果是这样,那就去做吧

    new File(System.getProperty("user.dir")).getAbsolutePath()