2015-11-03 21 views
5

Sto cercando di leggere direttamente un file zip da un URL remoto Ho cercato in questo modoCome leggere un file zip da un URL remoto senza estrarlo

import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipInputStream; 

public class Utils { 
    public static void main(String args[]) throws Exception { 
     String ftpUrl = "http://wwwccc.zip"; 
     URL url = new URL(ftpUrl); 
     unpackArchive(url); 
    } 

    public static void unpackArchive(URL url) throws IOException { 
     String ftpUrl = "http://www.vvvv.xip"; 
     File zipFile = new File(url.toString()); 
     ZipFile zip = new ZipFile(zipFile); 
     InputStream in = new BufferedInputStream(url.openStream(), 1024); 
     ZipInputStream zis = new ZipInputStream(in); 
     ZipEntry entry; 
     while ((entry = zis.getNextEntry()) != null) { 
      System.out.println("entry: " + entry.getName() + ", " 
        + entry.getSize()); 
      BufferedReader bufferedeReader = new BufferedReader(
        new InputStreamReader(zip.getInputStream(entry))); 
      String line = bufferedeReader.readLine(); 
      while (line != null) { 
       System.out.println(line); 
       line = bufferedeReader.readLine(); 
      } 
      bufferedeReader.close(); 
     } 
    } 
} 

sto ottenendo eccezione come

Exception in thread "main" java.io.FileNotFoundException: http:\www.nseindia.com\content\historical\EQUITIES\2015\NOV\cm03NOV2015bhav.csv.zip (The filename, directory name, or volume label syntax is incorrect) 
    at java.util.zip.ZipFile.open(Native Method) 
    at java.util.zip.ZipFile.<init>(Unknown Source) 
    at java.util.zip.ZipFile.<init>(Unknown Source) 
    at java.util.zip.ZipFile.<init>(Unknown Source) 
    at Utils.unpackArchive(Utils.java:30) 
    at Utils.main(Utils.java:19) 

Dove l'URL del file zip funziona correttamente quando si esegue da un browser.

risposta

2

File classe non progettata per funzionare con file remoti. Supporta solo i file che sono disponibili su un file system locale. Per aprire uno stream su un file remoto, è possibile utilizzare HttpURLConnection.

Chiama getInputStream() su un'istanza HttpURLConnection per ottenere un flusso di input che è possibile elaborare ulteriormente.

Esempio:

String url= "http://www.nseindia.com/content/historical/EQUITIES/2015/NOV/cm03NOV2015bhav.csv.zip"; 
InputStream is = new HttpUrlConnection(url).getInputStream(); 
+0

Grazie mille, mi hai salvato. – Pawan

1

Con la linea

File zipFile = new File(url.toString()); 

si sta cercando di creare un file denominato come l'URL che contiene caratteri che non sono consentiti.

Il file deve essere denominato semplice come

File zipFile = new File("zipfile.csv.zip"); 

Il compilatore vi sta dicendo che aswell:

(Il nome del file, nome della directory o sintassi dell'etichetta di volume non è corretto)

Sono sicuro che questo è il motivo per cui si sta verificando l'errore. Ma non sono sicuro del resto del codice.

+0

ho fatto in questo modo FILE zipfile = new File ("cm03NOV2015bhav.csv.zip"); sta lavorando per me. zipfile.csv.zip (Il sistema non riesce a trovare il file specificato) – Pawan

+0

Il nome del file può essere qualsiasi cosa tu voglia. Puoi anche ritagliare l'URL e avere solo il nome del file nel link come nome del file sul tuo server. – MiKE

-2

non potete creare file da URL del genere provare questo:

URL ftpUrl = new URL (" http://www.nseindia.com/content/historical/EQUITIES> /2015/NOV/cm03NOV2015bhav.csv.zip ");

File zipFile = nuovo file ("una posizione sull'unità locale");

FileUtils.copyURLToFile (ftpUrl, zipFile);

ZipFile zip = nuovo ZipFile (zipFile);

0

Nessuno dei precedenti ha funzionato per me.

Cosa ha lavoro come un fascino, è questa:

InputStream inputStream = new URL(urlString).openStream(); 
Problemi correlati