java.lang.NullPointerException
java.io.FileInputStream.<init>(FileInputStream.java:103)
com.struts.action.UploadAction.execute(UploadAction.java:56)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
UploadAction:public class UploadAction extends ActionSupport { private String username;
private String password;
private File file;

private String fileFileName;
private String fileContentType;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}



public String execute() throws Exception {

InputStream is=new FileInputStream(file);

String root=ServletActionContext.getRequest().getRealPath("/upload");

File destfile=new File(root,this.getFileFileName());
OutputStream os=new FileOutputStream(destfile);
byte[] bt=new byte[400];
int length=0;

while((length = is.read(bt))>0)
{
os.write(bt,length,0);

}

is.close();
os.close();



return SUCCESS;
}

解决方案 »

  1.   

    String root=ServletActionContext.getRequest().getRealPath("/upload");
    这个方法是被声明过时的啊,怎么还用??
      

  2.   

    问题大概出在这里吧
            String root=ServletActionContext.getRequest().getRealPath("/upload");
            
            File destfile=new File(root,this.getFileFileName());
            OutputStream os=new FileOutputStream(destfile);
    创建文件失败给你个例子看吧:import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Date;import org.apache.struts2.ServletActionContext;
    import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport {
    private File file;
    private String fileFileName;
    private String fileContentType;
    private String description;
    private String uploadDir;

    public File getFile() {
    return file;
    }

    public void setFile(File file) {
    this.file=file;
    }

    public String getFileFileName() {
    return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
    this.fileFileName=fileFileName;
    }

    public String getFileContentType() {
    return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
    this.fileContentType=fileContentType;
    }

    public String getDescription() {
    return description;
    }

    public void setDescription(String description) {
    this.description=description;
    }

    public String getUploadDir() {
    return uploadDir;
    }

    public void setUploadDir(String uploadDir) {
    this.uploadDir=uploadDir;
    }

    public String execute() throws Exception {
    String newFileName=null;
    long now=new Date().getTime();
    String path=ServletActionContext.getServletContext().getRealPath(uploadDir);
    File dir=new File(path);

    if(!dir.exists()) {
    dir.mkdir();
    }

    int index=fileFileName.lastIndexOf(".");

    if(index != -1) {
    newFileName=now + fileFileName.substring(index);
    } else {
    newFileName=Long.toString(now);
    }

    BufferedOutputStream bos=null;
    BufferedInputStream bis=null;

    try {
    FileInputStream fis=new FileInputStream(file);
    bis=new BufferedInputStream(fis);

    FileOutputStream fos=new FileOutputStream(new File(dir, newFileName));
    bos=new BufferedOutputStream(fos);

    byte[] buf=new byte[4096];

    int len=-1;
    while((len=bis.read(buf)) != -1) {
    bos.write(buf, 0, len);
    }
    }

    finally {
    try {
    if(null!=bis) {
    bis.close();
    }
    } catch(IOException e) {
    e.printStackTrace();
    }

    try {
    if(null!=bos) {
    bos.close();
    }
    } catch(IOException e) {
    e.printStackTrace();
    }
    }

    return SUCCESS;
    }
    }
      

  3.   

    是我自己太大意了,我把upload.jsp中的<s:file name="filename" label="filename"/>
    而Uploadaction中衹有
     private String username;    private String password;
        private File file;
        
        private String fileFileName;
        private String fileContentType;