2013-10-08 52 views
0

我可以使用:动态查找项目的目的地

getClass()。getClassLoader()。getResource(“”)。getPath());

动态获取我的项目中的类文件的路径。

但我需要为项目的主目录动态获取路径。我不能这样做静态,像这样:

File file = new File(“C:\ Users \ etc ...”);

因为项目的目的地可以从一台计算机更改为下一台计算机。我需要在项目的主目录中调用一个文件。我该如何动态地做到这一点。这和我在这个问题开始时的做法很相似,但它不能仅仅用于类。

有什么想法?

+0

为什么不使用先前的策略为您的类创建路径字符串,然后将其用作File构造函数的输入? – Prateek

+0

项目的主目录在运行时不存在。你的意思是安装目录?说一个网络应用程序? – EJP

回答

1

Java中没有这样的“java项目”。如果你知道你的类文件中关系的任何目录你试图找到,你可以使用你所获得的路径在您的第一个例子:

Url classUrl = ... 
File resourcePath = new File(classUrl.toUri()); 
File rootDir = resourcePath.getParentFile().getParentFile().getParentFile(); 

File rootDir = new File(resourcePath.getPath() + 
    "/../../../".replace("/", File.separatorChar)); 

当然,这只会在文件实际上在文件系统上时才起作用;如果它们在jar中,则需要定位jar文件。

但这通常不是你想要做的事情。通过将应用程序作为命令行参数或环境变量传递给应用程序来为应用程序配置沙箱是一种更好的做法。在某些情况下,使用预定义的系统属性也很有用,如user.home,user.dirjava.io.tmpdir

+0

原因是,我创建了一个java swing GUI,在这个项目中它将有一个HelpMaker项目(这是一个.chm文件... ex:HelpMaker.chm),它需要指向。我想找出一个方法,这个工作后,java swing项目清理和内置,它将能够指向这个文件成功。你能想出一个更好的方法来做到这一点? – newmarylandjersey

+0

再一次,Java中没有这样的概念作为“一个项目”。这听起来像是一个特定的IDE术语。如果你只是试图访问一个特定的文件,你可以确保它在类路径中,并使用ClassLoader.getResource()方法显式引用它,就像你前面描述的一样。 – ykaganovich