Can not find a java.io.InputStream with the name [inputStream] in the invocation stack问题解决

2015年03月22日 14:53 0 点赞 0 评论 更新于 2025-11-21 18:08

在开发过程中,我们可能会遇到如下具体异常信息:

Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the  tag specified for this action.

下面为你详细分析可能导致该异常的原因及对应的解决办法。

1. 文件路径问题

文件路径不正确,导致根本无法获取到文件。针对这种情况,我们可以将获取 InputStream 的语句放在 System.out.println() 中进行输出。示例代码如下:

InputStream inputStream = // 获取 InputStream 的代码;
System.out.println(inputStream);

若输出结果为 null,则表明路径存在问题,确切地说就是没有找到对应的文件。此时,你需要仔细检查文件路径是否正确,包括文件的目录结构、文件名以及文件扩展名等。

2. Action 中缺少相应的 get 方法

action 里没有编写配置文件中相关属性的 get 方法。检查配置文件中对应属性,并确保在 action 类中实现了该属性的 get 方法。例如,如果配置文件中涉及 inputStream 属性,那么 action 类中应该有类似如下的 get 方法:

public InputStream getInputStream() {
return inputStream;
}

3. 文件位置与获取方式问题

当上述两种情况都正确时,问题可能出在文件位置和获取输入流的方式上。

3.1 使用 ServletActionContext.getServletContext().getResourceAsStream(…) 方法

当采用 return ServletActionContext.getServletContext().getResourceAsStream("…") 这种方式获取输入流时,要保证文件位于 ServletContext 当中,也就是在当前的应用上下文中。因为该方法是从当前应用的上下文资源中获取输入流,如果文件不在这个范围内,就会出现找不到输入流的问题。

3.2 获取外部文件

如果想要获取外部文件,例如 D 盘中的某个文件,就需要自己创建输入流。示例代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class ExternalFileInputStreamExample {
public static InputStream getExternalFileInputStream() throws Exception {
File file = new File("D:\\spring.doc");
InputStream is = new FileInputStream(file);
return is;
}
}

通过上述代码,我们可以成功获取 D 盘中指定文件的输入流,从而解决该异常问题。

按照以上步骤逐一排查,应该能够解决 “Can not find a java.io.InputStream with the name [inputStream] in the invocation stack” 异常。

作者信息

menghao

menghao

共发布了 3994 篇文章