我有一个Java应用程序,并且log4j.properties文件位于src/com/my/path/props中。在编译的,它被复制到类/ COM /我的/路径/道具如何在用户目录更改时获取文件的文件路径?
文件通过PropertyConfigurator.configureAndWatch加载(user.dir来+ “/classes/com/my/path/props/log4j.properties”)。
这一切都正常工作,虽然它不是理想的,因为使用user.dir(但我不知道另一种方式来引用文件相对于“应用程序的开始目录”)。尝试使用NT Service包装器运行此应用程序时,会出现此问题。以这种方式完成后,user.dir将从应用程序的根目录更改为NTService包装器的exe文件所在的位置。
我的问题是:什么是适当的方式来获得一个log4j.properties文件的字符串文件路径表示在我的课/ COM /我的/路径/道具/目录?我意识到如果道具文件在一个罐子里,这将完全崩溃;但在这种情况下,它不是,只是文件系统上的一个文件。 ()。getClassLoader()。getResource(“com/my/path/props/log4j.properties”)。getURI())。getAbsolutePath(),但失败了,因为在生产中,文件的路径实际上是UNC路径,因此会抛出“URI具有权限组件”异常。
如何其他人处理这个问题?
谢谢。
我很困惑,因为你说该文件被复制到类路径(即在类目录中),但后来你提到“user.dir”。如果您正在从类路径加载文件,那么“user.dir”是无关紧要的。你想从哪里加载文件? – SingleShot 2009-09-14 23:10:05
由于Eclipse的正常编译过程,它被复制到了classes目录中。所以发生在部署时,prop文件位于classes目录中 – 2009-09-14 23:13:09
OK,我会尝试回答... – SingleShot 2009-09-14 23:22:28