2015-03-17 2 views
1

Я сделал небольшую программу для загрузки zip-файла по прямой ссылке и после этого извлеките все содержимое этого файла в тот же каталог. Он ничего не скачивает, и он также не извлекается. Это то, что я до сих пор:java.io.filenotfoundexception загрузка 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) 
+0

У вас есть какое-либо исключение? –

+0

@EelLee Я отредактировал свой главный пост. – xX4m4zingXx

+0

Итак, вы можете видеть, что ошибка «C: \ Tekst.txt (доступ запрещен)», в какой системе вы работаете - Windows, Linux? Может быть, у вас просто нет разрешения на эту папку? Пожалуйста, постарайтесь предоставить всю полезную информацию в вашем сообщении - покажите строку, которая выдает исключение, сообщите нам, на какой ОС вы работаете, и т. Д. –

ответ

0

Видимо этот файл просто не создан. Вы можете создать его с

new File(yourFilepath).createNewFile() 

и вы должны сделать это до того вы вызываете

FileOutputStream fos = new FileOutputStream(filepath + filename); 

, который бросает исключение. Тогда он работает отлично.

+0

Я попытался добавить этот фрагмент кода и снова получить ошибку. Я обновил основную запись с кодом, который у меня есть сейчас, и ошибкой, которую я получил от него. – xX4m4zingXx

+0

@ xX4m4zingXx отредактировал ответ, вам нужно создать файл * до того, как вы начнете что-то делать с ним ;-) –

+0

no you do not , FileOutputStream автоматически создаст файл. – jtahlborn

Смежные вопросы