java.io.filenotfoundexception下载ZIP和提取它(java.io.fil

2019-10-22 07:03发布

我做了一个小程序的直接链接和提取后的所有内容在同一目录中下载的zip文件。 它不下载任何东西,它也不会提取。 这是我到目前为止有:

package main;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Main {

    static String url = "https://www.dropbox.com/s/uml938guklfvo7r/Tekst.zip?dl=1";
    static int lastSlashIndex = url.lastIndexOf('/');
    static String filename= url.substring(lastSlashIndex + 1, url.length() - 5);
    static String filepath = "C:";
    private static final int BUFFER = 4096;

    public static void main(String[] args) {

        try{
            URL website = new URL(url);
            ReadableByteChannel rbc;
            rbc = Channels.newChannel(website.openStream());
            new File(filepath + filename).createNewFile();
            FileOutputStream fos = new FileOutputStream(filepath + filename);
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            fos.close();
        }catch(Exception e){ e.printStackTrace(); }

        try {
            unzip(filepath + filename, filepath);
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void unzip(String zipFilePath, String destDirectory) throws IOException {
        File destDir = new File(destDirectory);
        if (!destDir.exists()) {
            destDir.mkdir();
        }
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
        ZipEntry entry = zipIn.getNextEntry();
        // iterates over entries in the zip file
        while (entry != null) {
            String filePath = destDirectory + File.separator + entry.getName();
            if (!entry.isDirectory()) {
                // if the entry is a file, extracts it
                extractFile(zipIn, filePath);
            } else {
                // if the entry is a directory, make the directory
                File dir = new File(filePath);
                dir.mkdir();
            }
            zipIn.closeEntry();
            entry = zipIn.getNextEntry();
        }
        zipIn.close();
    }

    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        Line 68>> BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[BUFFER];
        int read = 0;
        while ((read = zipIn.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();
    }  
}

以下是错误:

java.io.FileNotFoundException: C:\Tekst.txt (Access is denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at main.Main.extractFile(Main.java:68)
    at main.Main.unzip(Main.java:55)
    at main.Main.main(Main.java:35)

Answer 1:

显然,这个文件只是尚未创建。 你可以用它创建

new File(yourFilepath).createNewFile()

你需要调用之前

FileOutputStream fos = new FileOutputStream(filepath + filename);

会抛出异常。 然后,它运行完美。



文章来源: java.io.filenotfoundexception downloading zip and extracting it