Вызывается: java.io.FileNotFoundException: /path/somthing.jar (является каталогом) при создании объекта FileOutputStream - PullRequest
1 голос
/ 28 октября 2011

это действительно простой, но он заставил меня почесать слух в течение 4 часов, теперь я сдаюсь.чтобы дать как можно больше информации, я могу сказать, что это проект Java WebApp с zk 5.0.8, как frontend + spring + hibernate + maven под Ubuntu 11.04 с разрешением для 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 (является каталогом)

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Не указывать:

if(finalfile.canWrite()) {

, поскольку вы только что создали файл и выполняете запись в него.Вы получите ошибочно названное FileNotFoundException (я думаю, переименовано в Java 7), когда конструктору OutputStream не удалось записать.

Другой совет, общая работа, такая как копирование, может выполняться с использованием apache-commons (IOUtils, FileUtils), то есть:

import org.apache.commons.fileupload.util.Streams;
Streams.copy(in, out, false);
1 голос
/ 28 октября 2011

Я могу ошибаться, но не является ли эта часть вашего кода неисправной?

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

Если каталог не существует, вы проверяете, не можете ли вы написать туда, а затем создаете его, в противном случае выдается ошибка.Я думаю, что ! здесь не так.

Может быть причиной вашей проблемы, но это не так.

...