java.io.FileNotFoundException: Source 'C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\upload_55add1bb_12b0895c35d__8000_00000002.tmp' does not exist发现以上错误,但是在本地测试代码中完全可以通过, 文件名称,上传文件,类型, 都可以在后台得到,但是在项目里面就是提示 无法找到资源文件!

解决方案 »

  1.   

    action中的文件属性完全是正确的,因为都可以获取到值。就是系统的那个tmp文件无法找到,导致构建InputStream出现问题@!! 希望大家能给我个解决方案!【奇怪的是我自己写的那个测试程序完全和这个一样,测试的能通过,这个却一直就提示无法找到文件。】希望大家能多顶顶!!! 同样给分
      

  2.   

    C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\upload_4321c64d_12b08a1cca9__8000_00000005.tmp我发现了一个问题,就是在C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\文件夹下生成了两个文件,
    upload_4321c64d_12b08a1cca9__8000_00000003.tmp
    upload_4321c64d_12b08a1cca9__8000_00000004.tmp
     
    可是很不辛,没有05 ,而我在后台打印的文件名称确实05,这是什么原因造成的呢?
      

  3.   

    楼上说不要带中文,可是我配置了 saveDir 也是同样的问题,就是发现找不到文件!
      

  4.   

    一般路径不建议用中文名和空格,你把Documents and Settings也改了试试
      

  5.   

    这样子用<constant name="struts.multipart.saveDir" value="/temp"></constant> 我也试了,可是还是相同的问题。。!!!
      

  6.   

    就是真实生成的文件【。tmp】名称的后一个数字+1  就和我后台取得的文件正好相同了。可是现在的问题就是我取得的文件的名称要比真实文件的名称不符合如:
    在C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\文件夹下生成了两个文件,
    upload_4321c64d_12b08a1cca9__8000_00000003.tmp
    upload_4321c64d_12b08a1cca9__8000_00000004.tmp
    而我在后台获得的是:
    C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\upload_4321c64d_12b08a1cca9__8000_00000005.tmp所以导致了文件无法找到的错误! 
      

  7.   

    你从这几个方面检查一下:
    1.commons-fileupload.jar包是否导入。
    2.是否配置了对应的fileupload拦截器,拦截器是否在上传的地方应用上了
     <interceptors>
        <interceptor name="fileUpload"   class="......"> 
                  </interceptor> 
        </interceptors>
    3.action中定义的文件名称是否正确,
       例如:页面上传文件名为file action自动获取文件名称为:fileFileName4.上传拿文件名称的时候,不要使用file.getName去那上传的文件名称,要使用你定义的fileFileName区获取当前上传文件的名称,否则,你使用file.getName获得的文件名称就是upload_4321c64d_12b08a1cca9__8000_00000003.tmp,这样的格式。你可以试试!
      

  8.   

    把这个文件夹删掉:C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2,然后重启tomcat,重新运行试试看
      

  9.   

    重新启动tomcat时,我看了下根本就不生成  .tmp的文件, 当第二次进行上传时才会生出两个tmp文件,可是这是我在后台获取的文件名称已经和他生成的名称不同了,就最后一个数字-1 就是真实的文件名称了。!我换了tomcat也不行,而且把上面每个人的建议都运行了一遍,还是不能解决! 看到此贴,望大家多顶顶。。!!
      

  10.   

    struts2的upload_4321c64d_12b08a1cca9__8000_00000003.tmp
    这种文件是缓冲文件,你最好贴出你是怎样处理这个文件的代码,如果你直接判断这个文件是会出现问题的
      

  11.   

    public String execute() throws Exception {
    String path = ServletActionContext.getServletContext().getRealPath("/realPath") + "\\" + this.getFileFileName();
    System.out.println(path);
    System.out.println(file.getName()); 
    FileInputStream in = new FileInputStream(file);
    FileOutputStream out = new FileOutputStream(path);
    int size = 0;
    while((size=in.read()) != -1){
    out.write(size);
    }
    out.close();
    in.close();
    return SUCCESS;
    }这就是我上传时的代码,fileNotException
      

  12.   

    .tmp的文件是struts2的生成的缓冲文件,重启或者使用它后,系统有时会自动删除的,所以你重启tomcat看不到 .tmp的文件。
      

  13.   

    文件名称可以得到,【但是名称和实际生产的tmp文件的名称不一致】,类型都可以正确得到!!!!
      

  14.   

    读取文件有错误! private File upload;
    private String uploadFileName;
    private String uploadContentType;
    public File getUpload() {
    return upload;
    } public void setUpload(File upload) {
    this.upload = upload;
    } public String getUploadFileName() {
    return uploadFileName;
    } public void setUploadFileName(String uploadFileName) {
    this.uploadFileName = uploadFileName;
    } public String getUploadContentType() {
    return uploadContentType;
    } public void setUploadContentType(String uploadContentType) {
    this.uploadContentType = uploadContentType;
    }

    public String  execute() throws Exception { 

    System.out.println(upload.getParent());//文件父路径
    System.out.println(uploadFileName);//文件名
    System.out.println(uploadContentType);//文件类型
        return null;

    }最好使用上面的,struts2上传文件已经有些配置的了,最好自己百度查查struts2的上传文件
    注意 private File upload;
    private String uploadFileName;
    private String uploadContentType;
    这三个的命名规则,struts2 根据他们来获取名,类型,你jsp的页面的上传文件name命名要用 upload,他要跟File upload 相同
      

  15.   

    System.out.println(upload.getParent());//文件父路径
    这个依然是缓冲文件的,你需要
    File f=upload;
    这样来转换文件
      

  16.   

    InputStream 和 OutputStream 应该是那些文件?
      

  17.   

    LZ多点百度啦!
    http://leeldy.blog.163.com/blog/static/13985306200931353544644/这是我百度得,应该跟上面的差不多了
      

  18.   

    系统生成的文件有:
    upload_c42ff28_12b0928a73f__8000_00000004.tmp
    upload_c42ff28_12b0928a73f__8000_00000005.tmp而我在后台得到的文件是:
    upload_c42ff28_12b0928a73f__8000_00000006.tmp所以出现了这种情况,FileNotFundException
    如何才能让后台得到的值和系统生成的相同?
      

  19.   

    这是我整个的文件夹路径:
    D:\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\upload_c42ff28_12b0928a73f__8000_00000013.tmp
    这是我后台打印的文件路径:
    D:\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2\upload_c42ff28_12b0928a73f__8000_00000014.tmp有文件夹啊!
      

  20.   

    temp只是临时文件啊,你以前的那个程序呢??
      

  21.   

    哎呀,老同志了!呵呵,  这个是struts2上传的, 他开始就是一个tmp文件啊
      

  22.   

    在new File的时候 用绝对路径试试, 我的也是出现这个问题, 把new File("d:\\kkk\\", 文件名)就可以了
      

  23.   

    今天看到楼主的问题经多方查阅,发现在C:\Documents and Settings\Administrator\桌面\apache-tomcat-6.0.26\work\Catalina\localhost\appstore2目录下创建一个upload文件夹问题就解决了。是不是在new File的时候不会自动创建一个upload的文件夹?请问楼主当年是怎么解决的呢?