package lee ;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction2 extends ActionSupport { private File file; private String fileFileName; private String fileContentType; public File getFile() { return file;
} public void setFile(File file) { this.file = file;
} public String getFileContentType() { return fileContentType;
} public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType;
} public String getFileFileName() { return fileFileName;
} public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName;
} @Override
public String execute() throws Exception { // 1.构建一个输入流 InputStream is = new FileInputStream(file);//file为空 // 2.构建一个上传文件路径 String root = ServletActionContext.getRequest().getRealPath("/fileload"); // 3.获得一个本地文件 File diskFile = new File(root, this.getFileFileName()); // 4.构建输出流 OutputStream os = new FileOutputStream(diskFile); // 5.能过字节写入输出流 byte[] buffer = new byte[400]; int length = 0; while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
is.close();
os.close(); return SUCCESS;
}
}
错误:严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
at java.io.FileInputStream.<init>(Unknown Source)
at lee.UploadAction2.execute(UploadAction2.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)

解决方案 »

  1.   

    你在  InputStream is = new FileInputStream(file);//file为空 
    前 输出下 file 就判断是否为空,
      

  2.   

      你用到struts2  你能从页面传来个File类型的,你有作类型转化没?  
          你不要写一个File file 
             你就一个String file  不就好,  提交上来的就是file文件的路径
      

  3.   


    用String file  怎么行?
    我是上传文件。用的是文件输入流,调试的是file为空;
      

  4.   

    你的页面提交的时候在form里面定义文件属性没有
      

  5.   

    补充:
    enctype="multipart/form-data" 因为只有这样传 传过去的值是以二进制的形式传的 
      

  6.   

    似乎我已经找到了原因,原来是struts2核心包的问题,我原来用的是struts2-core-2.1.6.jar改用struts2-core-2.0.11.jar就可以了。看了下源码,哎,头疼,写程序还要看别人怎么写。