在war存档中读取文本文件

Set*_* IK 9 java jsf

我正在尝试从我的war存档中读取文本文件,并在运行时在facelets页面中显示内容.我的文件夹结构如下

+ war archive> + resources> + email> + file.txt

我尝试使用以下代码读取resources/email/file.txt文件夹中的文件

File file = new File("/resources/email/file.txt");
BufferedReader reader = null;
try {
    reader = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
StringBuffer buffer = new StringBuffer();
if (reader != null) {
    String line = reader.readLine();
    while (line != null) {
        buffer.append(line);
        line = reader.readLine();
// other lines of code
Run Code Online (Sandbox Code Playgroud)

然而问题是当我运行上面代码的方法时,FileNotFoundException抛出了A. 我也尝试使用以下代码行来获取文件,但是没有成功

File file = new File(FacesContext.getCurrentInstance()
        .getExternalContext().getRequestContextPath() + "/resources/email/file.txt");
Run Code Online (Sandbox Code Playgroud)

我还是得到了FileNotFoundException.这是怎么造成的,我该如何解决?

Yog*_*ngh 23

试试以下:

   InputStream inputStream = 
      getClass().getClassLoader().getResourceAsStream("/resources/email/file.txt");
   BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream ));
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但文件路径中没有"/ resources"前缀 (2认同)

Tin*_*man 9

尽量避免使用File,因为这是用于从文件系统中读取内容.

当您的资源捆绑到WAR中时,您可以通过类加载器访问它.

确保将资源捆绑到WEB-INF/classes文件夹中.

InputStream in =
new InputStreamReader(FileLoader.class.getClassLoader().getResourceAsStream("/resources/email/file.txt") );
Run Code Online (Sandbox Code Playgroud)

这是一个关于这个主题的好博客

http://haveacafe.wordpress.com/2008/10/19/how-to-read-a-file-from-jar-and-war-files-java-and-webapp-archive/

  • 快乐三重图代表.:) (2认同)

归档时间:

查看次数:

29287 次

最近记录:

8 年,8 月 前