2017-03-14 1 views
0

J'écris un programme qui doit télécharger un fichier .csv chaque fois qu'il est exécuté afin de se tenir à jour. J'utilise NIO et le code suivant à télécharger:J'ai besoin de télécharger le fichier .csv à partir de l'URL dans java, mais je reçois la source .html au lieu

URL url = new URL(urlStr); 
ReadableByteChannel rbc = Channels.newChannel(url.openStream()); 
FileOutputStream fos = new FileOutputStream(file); 
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 
fos.close(); 
rbc.close(); 

Le problème est, au lieu d'obtenir le contenu .csv, je reçois un .csv avec la source de la page .html de l'URL. Si vous utilisez l'URL avec un navigateur, le fichier correct est téléchargé, mais pas avec NIO. Est-il possible de forcer le programme à obtenir le fichier au lieu du contenu HTML?

EDIT: essayer d'utiliser HttpURLConnection, bur avec les mêmes résultats:

public static void downloadFile(String fileURL, String saveDir) throws IOException { 
     URL url = new URL(fileURL); 
     HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
     int responseCode = httpConn.getResponseCode(); 
     int BUFFER_SIZE = 4096; 

     // always check HTTP response code first 
     if (responseCode == HttpURLConnection.HTTP_OK) {   
      // opens input stream from the HTTP connection 
      InputStream inputStream = httpConn.getInputStream(); 

      // opens an output stream to save into file 
      FileOutputStream outputStream = new FileOutputStream(saveDir); 

      int bytesRead = -1; 

      byte[] buffer = new byte[BUFFER_SIZE]; 
      while ((bytesRead = inputStream.read(buffer)) != -1) { 
       outputStream.write(buffer, 0, bytesRead); 
      } 
      outputStream.close(); 
      inputStream.close(); 
     } else { 
      System.out.println("No file to download. Server replied HTTP code: " + responseCode); 
     } 
     httpConn.disconnect(); 
    } 

(adapté de: http://www.codejava.net/java-se/networking/use-httpurlconnection-to-download-file-from-an-http-url)

+0

Si la seule façon de l'obtenir est via HTTP, ce que je suppose est le cas puisque vous utilisez un navigateur, vous devrez utiliser un client HTTP, par exemple HttpUrlConnection. –

+0

J'ai essayé cette approche: http://www.codejava.net/java-se/networking/use-httpurlconnection-to-download-file-from-an-http-url avant, mais avec les mêmes résultats –

+0

Ce code est beaucoup plus susceptible de fonctionner. Je mettrais votre version dans la question au lieu de ce qu'il y a maintenant. –

Répondre

-1
private void download() 
{ 
    WebClient webClient = new WebClient();               // Creates a webclient 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);     // Uses the Event Handler to check whether the download is complete 
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); // Uses the Event Handler to check for progress made 
    webClient.DownloadFileAsync(new Uri("URLpath"), @"destinationpath");   // Defines the URL and destination directory for the downloaded file 
} 

essayer

+0

Est-ce le code C#? –

+0

Je peux me tromper complètement, mais ne sont pas ceux pour C#? EDIT: C'est en Java, comme l'étiquette dit –

+0

désolé, n'a pas remarqué que – user3521908