1

这是一个非常基本的,但它让我挠了 4 个小时,现在我要放弃了。为了提供尽可能多的信息,我可以说这是一个 java webapp 项目,在 ubuntu 11.04 下使用 zk 5.0.8 作为前端+spring+hibernate+maven,并允许 basedir 设置为 777。

尝试了文件上传一切似乎都很好,而且我有信心我的代码是正确的,但它只是不工作。

这是代码

private boolean saveUploadledFile(Media uploadedMedia, String basedir) {

    String code = codeGenerator.generateContentCode(15);
    String FINAL_DIR_PATH = basedir + "/"+"Racing" + "/" + code;
    String FINAL_FILE_PATH = FINAL_DIR_PATH + "/" + uploadedMedia.getName();
    alert(FINAL_DIR_PATH);
    try {
        File finaldir = new File(FINAL_DIR_PATH);
        //apache commons
        FileUtils.forceMkdir(finaldir);
        alert("Size equals" + uploadedMedia.getByteData().length);
        fout = new FileOutputStream(new File(FINAL_DIR_PATH+"/"+addContentWindow1$txtName.getText()+".jar"));
          //apache commons
          IOUtils.copy(uploadedMedia.getStreamData(), fout);

    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        try {
            IOUtils.closeQuietly(in);
            IOUtils.closeQuietly(fout);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    return false;
}

new FileOutputStream 总是抛出异常。所以如果我无法指定我想保存的位置如何保存文件。有任何想法吗?我故意输出文件的大小以确保有文件。任何人都可以解释一下吗?感谢您阅读本文

实际的例外是

引起:java.io.FileNotFoundException:/joseph/mbcs/Games/Racing/20314/somthing.jar(是一个目录)

4

2 回答 2

1

我可能错了,但是您的代码的这一部分不是有问题吗?

     if (!finaldir.exists()) {
        if (!finaldir.canWrite())
            finaldir.mkdirs(); // this creates no directory no error
         else
             alert("Cannot write to the directory" );
     }

如果该目录不存在,则检查是否无法在那里写入然后创建它,否则会输出错误。我认为!有错误。

可能是您的问题的原因,但也可能不是。

于 2011-10-28T07:43:07.807 回答
1

忽略:

if(finalfile.canWrite()) {

因为您刚刚创建了文件并正在写入它。当 OutputStream 构造函数写入失败时,您将得到一个错误命名的 FileNotFoundException(我认为在 Java 7 中重命名)。

另一个提示,像复制这样的一般工作可以使用 apache-commons (IOUtils, FileUtils) 来完成,即:

import org.apache.commons.fileupload.util.Streams;
Streams.copy(in, out, false);
于 2011-10-28T08:39:10.693 回答