如何在 Struts 2 应用程序中读取文本文件 [重复]

Posted

技术标签:

【中文标题】如何在 Struts 2 应用程序中读取文本文件 [重复]【英文标题】:How can one read a text file in a Struts 2 app [duplicate] 【发布时间】:2010-12-19 12:16:17 【问题描述】:

开发 Struts 2 应用程序我遇到了以下问题。我需要使用我的应用程序读取部署在 Web 服务器中的文本文件。我怎样才能知道它的相对路径来访问它。换句话说,如果我知道部署目录中的相对路径,我怎么能找到绝对路径。 当我遇到与 servlet 类似的问题时,我曾经使用 this.getContextPath() (或类似的东西)返回网络服务器中文件夹的绝对路径。

编辑: 谢谢大家的回答。对我来说是这样的:

String path=GetPointsOfInterestAction.class.getResource("../../../resources/visitor_attractions.txt")

您能否解释一下为什么我会成功,因为我是在 java 中迈出第一步。

【问题讨论】:

【参考方案1】:

如果它放在 webapp 的类路径中,那么只需使用:

InputStream input = servletContext.getResourceAsStream("file.txt");

如果放在全局类路径中,则使用:

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt");

如果是放在网页内容中,那么就用:

InputStream input = new FileInputStream(servletContext.getRealPath("file.txt"));

这些示例假定它们位于根目录中。您当然可以使用相对路径,而不是类路径根或 webcontent 根,例如path/to/file.txt。您可以通过ServletActionContext#getServletContext() 获取Struts 中的ServletContext

编辑:您使用以下内容编辑了您的问题:

编辑:谢谢大家的回答。对我来说是这样的:

String path=GetPointsOfInterestAction.class.getResource("../../../resources/visitor_attractions.txt")

请解释一下原因

这实际上不是“正确”的方式,但这也是可行的。您只需确保您知道文件的相对路径,而不是GetPointsOfInterestAction 类的实际路径。这个类当然放在不同的包中,所以您基本上需要退回一个目录(就像您在普通磁盘文件系统中所做的那样:cd ../ 等等)。同样,这不是最优雅的方式。您需要使用上述前两种方式之一,资源名称为resources/visitor_attractions.txt

【讨论】:

【参考方案2】:

Here

ServletActionContext.getServletContext()

你似乎知道从那里做什么。

【讨论】:

是的。如果我尝试以常量读取它会返回 null 的问题。这似乎是一个错误的设计决定。【参考方案3】:

您可以使用Resource Bundle。我用它们来查找属性文件。我相信该目录只需要在 Classpath 上,ResourceBundle 就会找到它。

【讨论】:

【参考方案4】:

如果文件在类路径上(不清楚,但这是个好主意),我建议使用实用程序 classorg.apache.struts2.util.ClassLoaderUtils。从它的java文档:

这个类对于以跨不同应用服务器的容错方式加载资源和类非常有用。

特别注意ClassLoaderUtils.getResourceAsStream(String resourceName, Class callingClass) 静态方法,它是一种将资源作为流加载的便捷方法。如文档所述,用于查找资源的算法在getRessource() 中给出:

此方法将尝试加载 资源使用以下方法 (按顺序):

来自Thread.currentThread().getContextClassLoader() 来自ClassLoaderUtil.class.getClassLoader() 来自callingClass.getClassLoader()

【讨论】:

以上是关于如何在 Struts 2 应用程序中读取文本文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在vb中如何一次性地将文件内容读取到文本框

如何在 Struts 2 中将对象公开给我的所有视图?

struts中读取外部配置文件信息

如何以UTF-8格式将资源文件存储在struts中

在C++中如何读取文本中的数据存储为数组变量?

如何在 Android 中读取文本文件?