【问题标题】:Caused by: java.io.FileNotFoundException: /path/somthing.jar (Is a directory) when FileOutputStream object is created引起:java.io.FileNotFoundException: /path/somthing.jar (是一个目录) 创建 FileOutputStream 对象时
【发布时间】:2011-10-28 07:37:23
【问题描述】:

这是一个非常基本的,但它让我挠了 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(是一个目录)

【问题讨论】:

    标签: java jakarta-ee io create-directory


    【解决方案1】:

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

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

    如果该目录不存在,则检查是否不能在那里写入然后创建它,否则会输出错误。我觉得!有问题。

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

    【讨论】:

    • 您好,我更正了您发现的内容,但我想不是。更新了我的帖子
    • 呃。我刚刚意识到你从来没有在finalfile上打电话给createNewFile()
    • 真的吗?这里真的有必要吗,当我将我的方法与网上的各种方式进行比较时,我没有找到该方法。但我想首先创建目录显然存在问题。就像我提到的使用简单的控制台项目创建目录一样.甚至不知道这里缺少什么。谢谢
    • 已根据您的建议进行了更新,现在迷路了。仍然无法正常工作:(
    • 抱歉...我不知道此异常与您的代码有何关系。根据文档,该消息非常清楚地表明您尝试写入的文件实际上是一个目录。根据您的代码,我看不出这是怎么发生的。
    【解决方案2】:

    省略:

    if(finalfile.canWrite()) {
    

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

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

    import org.apache.commons.fileupload.util.Streams;
    Streams.copy(in, out, false);
    

    【讨论】:

    • 您好,感谢您的提示。我认为我的问题实际上在于我无法从 webapp 创建目录。所以问题实际上发生在编写输出流之前。也许我错了,但 can write 总是返回 false
    • 顺便说一下,您能否详细说明您的解决方案。我看不到如何在我的代码中使用它,因为我不熟悉那个库。谢谢
    • 没有人(其他)可以写入已经运行的 FileOutputStream,因此 File.canWrite 返回 false。只需删除测试。或者试试 { ... } catch (IOException e) { could not write }
    • DOne 已经创建了目录,但我得到了另一个异常。我真的不明白为什么它抱怨文件是目录,谢谢回复
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多