最近在研究struts2文件上传实例,发现老是抛出java.io.FileNotFoundExceptionF:\apache-tomcat-6.0.32\webapps\struts2_1\upload\psbCA8YZS4S.jpg。经过网上查阅资料始终没有找到解决方案。后来看到一网友说把new File的路径改成绝对路径,试了下果然可以。可这并不程序的设计要求,不可能每次上传写一个绝对路径。后来因为巧合我又发现了一种解决办法。我在struts2的配置文件是这样的
<action name="uploadAction" class="com.wang.blog.action.UploadAction">
<param name="allowTypes">
image/pjpeg,image/bmp,image/jpg,image/png,image/gif,image/jpeg
</param>
<param name="savePath">/upload</param>
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
我配置了一个savePath就是文件上传的保存路径。Action中通过ServletActionContext.getServletContext().getRealPath(savePath)得到完整的保存路径,控制台打印就是这样的路径F:\apache-tomcat-6.0.32\webapps\struts2_1\upload,然后根据这个路径加上上传文件的名称new一个File实现文件保存。但最后会报FileNotFoundException,后来我在F:\apache-tomcat-6.0.32\webapps\struts2_1目录下创建了一个upload文件夹问题就决解了,不报错。是不是new File的时候程序不会帮我们创建一个upload文件夹?还是别的原因?请问像这种问题还有没其他的决解方法。毕竟这个方法太土每次都要自己创一个相应的文件夹。
<action name="uploadAction" class="com.wang.blog.action.UploadAction">
<param name="allowTypes">
image/pjpeg,image/bmp,image/jpg,image/png,image/gif,image/jpeg
</param>
<param name="savePath">/upload</param>
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
我配置了一个savePath就是文件上传的保存路径。Action中通过ServletActionContext.getServletContext().getRealPath(savePath)得到完整的保存路径,控制台打印就是这样的路径F:\apache-tomcat-6.0.32\webapps\struts2_1\upload,然后根据这个路径加上上传文件的名称new一个File实现文件保存。但最后会报FileNotFoundException,后来我在F:\apache-tomcat-6.0.32\webapps\struts2_1目录下创建了一个upload文件夹问题就决解了,不报错。是不是new File的时候程序不会帮我们创建一个upload文件夹?还是别的原因?请问像这种问题还有没其他的决解方法。毕竟这个方法太土每次都要自己创一个相应的文件夹。
异常说,找不到你所说的文件夹,你代码里面有没有,检测文件夹这段啊,
如果没有的话加上吧
代码贴给你:public String save() {
if (file != null && file.exists()) {
String path = ServletActionContext.getRequest().getRealPath("/image");
String fileName = new UUIDGenerator().generate().toString(); //用UUID算法取名
String data[] = fileFileName.split("\\.");
String houzhui = data[data.length - 1]; // abc.cdf.jpg
File to = new File(path, fileName + "." + houzhui);
try {
FileUtil.copyFile(file, to); //这个是我封装的io流而已,你可以不管
stu.setImage("/image/" + fileName + "." + houzhui);
} catch (IOException e) {
e.printStackTrace();
}
}
//持久层处理代码省略
return "save_next";
}
上面的代码很清晰,我是做的比较复杂,用了uuid替换原来上传的文件名,其他就是你想要知道的了