在Eclipse中引用文件而不对路径进行硬编码?

时间:2011-12-19 22:00:56

标签: java eclipse file

我正在Eclipse中创建一个动态Web项目,我经常在XML文件中编写和读取。该文件位于我的项目工作区中,名为xml。我想知道Java是否提供了一些访问文件的方法,而无需对文件路径进行硬编码。我一直在寻找解决方案,但我还没有真正找到任何非常清楚的东西。谢谢!

3 个答案:

答案 0 :(得分:2)

您可以按照其他人的建议将其放入类路径中,但您将无法写入它。

而是将绝对路径作为VM参数或环境变量提供,这样您就不需要对其进行硬编码。

E.g。

-Dconfig.location=/path/to/config/file

File xmlFile = new File(System.getProperty("config.location"), "some.xml");
// ...

作为一种完全不同的替代方案,您可以考虑使用数据库。

答案 1 :(得分:0)

您可以使用Servlet中的以下内容获取正确的路径:

String filename = getServletContext().getRealPath("/xml/config.xml");

注:

如果文件在WAR文件中,

getRealPath可能会返回null。在这种情况下,如果您的文件位于WEB_INF/classes,那么您可以使用ServletContext.getResourceAsStream("/config.xml")

请参阅此link

答案 2 :(得分:0)

我认为Servlet API不会为您提供可靠,可写,将工作文件放在所有容器中的路径。如果您的容器直接从WAR运行WebApp,则getRealPath()无法指向您可以实际写入的内容。我认为,无论容器如何支持你唯一的选择是在web.xml中硬编码一些路径。将其作为上下文参数执行,您可以在部署时更改它。在一天结束时,您必须在代码或配置中声明一个完全限定的路径,以获得您所寻求的效果。

或者,您真的需要知道文件的名称吗?在一些Servlet应用程序中,我通过普通jane java.io.file.createTempFile设法获得了动态可写存储的效果:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#createTempFile(java.lang.String,java.lang.String)