eclipse里虚拟机的路径问题我在MyEclipse中新建了一个web工程,在src下新建一个test包,在包下新建一个Test.
eclipse里虚拟机的路径问题 我在MyEclipse中新建了一个web工程,在src下新建一个test包,在包下新建一个Test.java,代码如下:
package test; import java.io.File; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { System.out.println(Test.class.getClassLoader().getResource("").getPath()); new File("test.txt").createNewFile(); } }控制台打印出
/D:/workspace/Test7/WebRoot/WEB-INF/classes/
test.txt在工程根目录下(D:\workspace\Test7)
问题来了,从控制台打印的语句可以看出虚拟机的根目录是在classes下的
我这个test.txt是相对路径,应该是在classes路径下才对。
我又做了实验,用命令行执行该代码,D:\workspace\Test7\WebRoot\WEB-INF\classes>java test.Test
这次test.txt生成路径是D:\workspace\Test7\WebRoot\WEB-INF\classes\
这么看来是eclipse里面的启动加了些东西了,我看了下run configurations,默认设置都是空的。
我又用jvisualvm查看这个jvm的启动参数,参数是-Dfile.encoding=UTF-8和-Xbootclasspath/a:...(eclipse的jar包)
不想是能改变路径的
不明白了,哪位兄弟给我解释下,这是怎么回事?
如果用java命令行怎么实现eclipse里面的效果?
[最优解释] Test.class.getClassLoader().getResource("")
这个是让负责找到了Test这个类定义的ClassLoader的目录,并不是你期望的程序级的当前目录,两者不能混为一谈。
你试试看:
D:\>java -cp "D:\workspace\Test7\WebRoot\WEB-INF\classes" test.Test
你再看看这次文件会生成在哪里。
想看到程序级的当前目录,就:System.out.println(new File("").getAbsolutePath());
[其他解释] D:\>java -cp "D:\workspace\Test7\WebRoot\WEB-INF\classes" test.Test
test.txt生成在classes下
另外我想请教下new File("").getAbsolutePath(),这个东西是由什么决定的,在eclipse里面执行和使用java命令执行的结果不一样。
[其他解释] 用cp有效,我刚是路径不对。
D:\workspace\Test7>java -cp "D:\workspace\Test7\WebRoot\WEB-INF\classes" test.Test
这样就和eclipse里面效果一样了
非常感谢
[其他解释] ◎ test.txt生成在classes下
—— 真有意思,我这里测试是生成在根目录上的。
◎ 这个东西是由什么决定的
—— 没记错的话,应该是:
System.getProperty("user.dir")
[其他解释] 这个分怎么给,第一次在这发帖。。。
[其他解释] 引用: ◎ test.txt生成在classes下 —— 真有意思,我这里测试是生成在根目录上的。 ◎ 这个东西是由什么决定的 —— 没记错的话,应该是: System.getProperty("user.dir") 是我的错,我打命令的时候还在classes位置,非常感谢,分给你了。