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