首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在servlet中访问本地文件

如何在servlet中访问本地文件
EN

Stack Overflow用户
提问于 2014-08-11 12:51:39
回答 2查看 12.6K关注 0票数 2

我在本地设置Tomcat服务器,并将文本文件放在我的C盘(c:\test\myfile.txt)中。

在我的servlet中,我指定了文件的确切路径来读取它。我成功做到了这一点。

我的问题是,在部署之前,我应该将txt文件放在哪里,以及如何导航到它来阅读它?我做了一个测试,并在我本地的Tomcat上运行

代码语言:javascript
运行
复制
System.out.println("Working Directory = " +
              System.getProperty("user.dir"));

它向我展示了Eclipse文件夹!也许是因为我在eclipse中运行tomcat。因此,我确信有一个特定的文件夹来存放数据,或者我应该在文件系统中的某个地方创建一个文件夹,但我需要相对路径。

欢迎提出任何建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-11 13:01:15

这是你的选择。基本上有三种方式:

将其放在类路径中,以便您可以使用类路径相对路径通过ClassLoader#getResourceAsStream()加载它:

代码语言:javascript
运行
复制
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));

这里,filename.properties应该放在webapp的默认类路径所覆盖的根目录中,例如Webapp/WEB-INF/libWebapp/WEB-INF/classesAppserver/libJRE/lib。如果属性文件是特定于webapp的,最好将其放在WEB-INF/classes中。如果在IDE中开发项目,也可以将其放在src文件夹(项目的源文件夹)中。

或者,也可以将其放在默认类路径之外的某个位置,并将其路径添加到appserver的类路径中。例如,在Tomcat中,您可以将其配置为Tomcat/conf/catalina.properties的shared.loader属性。

2.)将其放在web文件夹(项目的web内容文件夹)中的某个位置,这样您就可以使用web内容相对路径通过ServletContext#getResourceAsStream()加载它:

代码语言:javascript
运行
复制
Properties properties = new Properties();
properties.load(getServletContext().getResourceAsStream("/WEB-INF/filename.properties"));

请注意,我已经演示了将文件放在/WEB-INF文件夹中,否则它将被任何been浏览器公开访问。还要注意,ServletContext位于继承的GenericServlet#getServletContext()仅可访问的任何HttpServlet类中。

3.)将它放在本地磁盘文件系统中的某个位置,这样您就可以使用本地磁盘文件系统的绝对路径以通常的java.io方式加载它:

代码语言:javascript
运行
复制
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/classesWEB-INF/lib$TOMCAT_HOME/lib下)加载文件(和类)。

Tomcat's config directory加载文件的最简单示例是:

代码语言:javascript
运行
复制
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);
票数 5
EN

Stack Overflow用户

发布于 2014-08-11 12:59:43

将配置文件放在webapp WEB-INF/classes文件夹下,代码如下

代码语言:javascript
运行
复制
InputStream is= 
   YourClassName.class.getResourceAsStream("myfile.txt");

如果您想在JSP中使用,也可以尝试其他选项。

代码语言:javascript
运行
复制
String myfile=
  application.getRealPath("myfile.txt"));

or

String myfile =
  getServletContext().getRealPath("myfile.txt"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25236036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档