有关Struts下载文件时报错问题

在学习文件下载的时候,我也是按照网络课程上面老师的代码一句一句敲得,和老师的一模一样;到最后测试下载的时候出现了如下的错误:

而老师的写的代码可以完美运行,以下是跟着老师敲的代码:

 1 package com.action;
 2 import java.io.File;
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.InputStream;
 6 import org.apache.struts2.ServletActionContext;
 7 import com.opensymphony.xwork2.ActionSupport;
 8 
 9 @SuppressWarnings("serial")
10 public class FileDownload extends ActionSupport {
11 
12     public InputStream getDownloadFile() {
13         //获取资源文件路径
14         InputStream inputStream = ServletActionContext.getServletContext().getResourceAsStream("F:\Eclipse\workspace\fileUpload_Download\WebContent\upload\java.txt");    
15         return inputStream;
16     }
17     
18     @Override
19     public String execute() throws Exception {
20         
21         return SUCCESS;
22     }
23 }

struts.xml文件中的配置信息如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <constant name="struts2.devMode" value="true"></constant>
 7     <package name="default" extends="struts-default">
 8         
 9        <action name="downloadFile" class="com.action.FileDownload">
10            <result type="stream">
11                <param name="contentDisposition">attachment;filename="java.txt"</param>
12                <param name="inputName">downloadFile</param>
13            </result>
14        </action>
15     </package>
16 </struts>

根据报错的信息可以知道,大致错误是找不到对应的文件,导致这种错误无非就是文件路径有错误,或者是根本就不存在这样的文件。所以在

public InputStream getDownloadFile(){...}方法中打印出inputStream,看看获取道德值是否为Null值。通过调试发现在控制台中打印出来的inputStream的值确实为null。(不知道为啥会获取不到,路径正确,文件也存在)。
所以只能另外想办法获取了,以下是在getDownloadFile()方法中另一种获取路径的方法:
 1 @SuppressWarnings("serial")
 2 public class FileDownload extends ActionSupport {
 3 
 4     public InputStream getDownloadFile() {
 5         
 6         File fileDownload = new File("F:\Eclipse\workspace\fileUpload_Download\WebContent\upload\java.txt");
 7         InputStream inputStream;
 8         try {
 9              inputStream = new FileInputStream(fileDownload);
10              System.out.println(inputStream);
11              return inputStream;
12         } catch (FileNotFoundException e) {
13             System.out.println("文件下载出错!");
14             e.printStackTrace();
15         }
16         return null;
17     }
18     

改为这样后再次测试,发现可以运行通过。

 
原文地址:https://www.cnblogs.com/lihuibin/p/8040479.html