IOException - Доступ запрещен Используя FileOutputStream

Я нашел удобным использовать целое число, чтобы представить количество центов и затем разделиться на 100 для представления. Избегает целой проблемы.

5
задан David Castle 21 October 2009 в 16:56
поделиться

2 ответа

Проблема в том, что эти вызовы накладываются друг на друга:

  fileToWrite.mkdirs(); //creates a directory e.g. C:\temp\foo\x
  fileToWrite.createNewFile(); //attempts to create a file C:\temp\foo\x

Операция создания не выполняется, потому что вы только что создали каталог с тем же именем, что и файл, который вы хотите создать.

Что вместо этого вы хотите сделать следующее:

fileToWrite.getParentFile (). mkdirs ()

А также, вызов createNewFile () не нужен.

На основе вашего кода. Следующее «распаковывает» zip-файл:

import java.io.*;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
import java.util.Enumeration;

public class Unzipper {
    public static void main(String[] args)
            throws IOException {
        final File file = new File(args[0]);
        final ZipFile zipFile = new ZipFile(file);
        final byte[] buffer = new byte[2048];
        final File tmpDir = new File(System.getProperty("java.io.tmpdir"), zipFile.getName());

        if(!tmpDir.mkdir() && tmpDir.exists()) {
            System.err.println("Cannot create: " + tmpDir);
            System.exit(0);
        }

        for(final Enumeration entries = zipFile.entries(); entries.hasMoreElements();) {
            final ZipEntry zipEntry = (ZipEntry) entries.nextElement();
            System.out.println("Unzipping: " + zipEntry.getName());

            final InputStream is = zipFile.getInputStream(zipEntry);
            final File fileToWrite = new File(tmpDir, zipEntry.getName());
            final File folder = fileToWrite.getParentFile();
            if(!folder.mkdirs() && !folder.exists()) {
                System.err.println("Cannot create: " + folder);
                System.exit(0);
            }

            if(!zipEntry.isDirectory()) {
                //No need to use buffered streams since we're doing our own buffering
                final FileOutputStream fos = new FileOutputStream(fileToWrite);
                int size;
                while ((size = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, size);
                }
                fos.close();
                is.close();
            }
        }
        zipFile.close();
    }
}

Заявление об ограничении ответственности: я не тестировал его, выходя за рамки самых основ.

12
ответ дан 18 December 2019 в 13:16
поделиться

Почему вы вызываете createNewFile () ? Просто создайте FileOutputStream.

2
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: