如何在servlet中访问本地文件
我在本地设置了Tomcat服务器,并将文本文件放置在C驱动器(c:\ test \ myfile.txt)中。
在我的servlet中,我指定了读取文件的确切路径。我成功做到了。
我的问题是,在部署之前应将txt文件放在哪里,如何导航到该文件以进行读取?我进行了测试并在本地Tomcat上运行
System.out.println("Working Directory = " + System.getProperty("user.dir"));
它向我展示了Eclipse文件夹!也许是因为我通过Eclipse运行了tomcat。因此,我确定有一个特定的数据文件夹,或者也许我应该在文件系统中的某个位置创建一个文件夹,但是我需要相对路径。
任何建议表示赞赏
回答:
这是你的选择。基本上有三种方式:
将其放在类路径中,以便可以ClassLoader#getResourceAsStream()
使用相对于类路径的路径来加载它:
Properties properties = new Properties();properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
这里filename.properties
应该被放置在其通过web应用程序的默认类路径,例如所覆盖的根源之一Webapp/WEB-
INF/lib,Webapp/WEB-
INF/classes,Appserver/lib
或JRE/lib
。如果propertiesfile是特定于webapp的,则最好将其放在中WEB-
INF/classes。如果要在IDE中开发项目,则也可以将其放在src文件夹(项目的源文件夹)中。
您也可以将其放置在默认类路径之外的某个位置,并将其路径添加到应用服务器的类路径。例如,在Tomcat中,您可以将其配置为的shared.loader属性Tomcat/conf/catalina.properties
。
2.)将其放在Web文件夹(项目的Web内容文件夹)中的某个位置,以便您可以ServletContext#getResourceAsStream()
使用相对于webcontent的路径加载它:
Properties properties = new Properties();properties.load(getServletContext().getResourceAsStream("/WEB-INF/filename.properties"));
请注意,我已演示将文件放置在文件/WEB-
INF夹中,否则任何Web浏览器都可以公开访问该文件。还要注意,ServletContext
在任何HttpServlet
类中,都只能由Inherited访问GenericServlet#getServletContext()
。
3.)将其放在本地磁盘文件系统中的某个位置,以便您可以java.io
使用绝对本地磁盘文件系统路径以常规方式加载它:
Properties properties = new Properties();properties.load(new FileInputStream("/absolute/path/to/filename.properties");
这里有很多不同的方法,但这取决于您的需求:
要加载一个属性文件从$TOMCAT_HOME/conf
directory您需要使用访问它java.io.File
的对象,因为类加载器(如this.getClass().getClassLoader().getResourceAsStream(...)
仅仅是能够从你的类路径加载文件(类)(下WEB-
INF/classes,WEB-INF/lib
或$TOMCAT_HOME/lib
)。
从中加载文件的最简单示例Tomcat's config directory
是:
File configDir = new File(System.getProperty("catalina.base"), "conf");File configFile = new File(configDir, "myconfig.properties");
InputStream stream = new FileInputStream(configFile);
Properties props = new Properties();
props.load(stream);
以上是 如何在servlet中访问本地文件 的全部内容, 来源链接: utcz.com/qa/425041.html