2016-07-31 9 views
0

Ich habe ein Problem beim Lesen einer CSV-Datei aus dem Internet. Ich bekomme eine Ausnahme für Datei nicht gefunden. Das ist die Quelle: http://data.okfn.org/data/core/s-and-p-500-companies/r/constituents.csv Wie könnte es sein, die Datei kann nicht gefunden werden, wenn ich es leicht öffnen kann? Was fehlt mir hier?Lesen von Daten aus einer CSV-Datei - Datei nicht gefunden Ausnahme für eine gültige Quelle

package Investing; 


import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

public class Main { 

    public static void main(String[] args) { 

    String csvFile = "http://data.okfn.org/data/core/s-and-p-500-  companies/r/constituents.csv"; 
    String line = ""; 
    String cvsSplitBy = ","; 


    try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) { 

     while ((line = br.readLine()) != null) { 

      // use comma as separator 
      String[] data = line.split(cvsSplitBy); 

      System.out.println(data); 

     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


} 
} 
+0

herunterladen, die auf lokale Datei manuell und dann Filereader verwenden. – SMA

+0

@SMA Der Inhalt der Datei kann sich ändern, deshalb möchte ich die Daten direkt aus dem Internet lesen. Es gibt keine Möglichkeit, dies zu tun? – Niminim

+1

Dann lesen Sie besser von URL oder downloaden Sie die Datei und lesen Sie dann die Datei. – SMA

Antwort

1

FileReader wird für lokale Dateien verwendet. Siehe: Read remote .csv file using opencsv zum Lesen einer Remote-CVS-Datei.

Eine weitere Alternative eine Remote-Datei in lesen:

public static void main(String[] args) { 

    String csvFile = "http://data.okfn.org/data/core/s-and-p-500-companies/r/constituents.csv"; 

    try { 
     URL url12 = new URL(csvFile); 
     URLConnection urlConn = url12.openConnection(); 
     InputStreamReader inStream = new InputStreamReader(urlConn.getInputStream()); 
     BufferedReader buff = new BufferedReader(inStream); 

     String line = buff.readLine(); 
     line = buff.readLine(); 
     while (line != null) { 

      System.out.println(line); 
      line = buff.readLine(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
+0

Ja, ich weiß. Ich habe diesen Code benutzt und etwas geändert. – Niminim

+0

Was ist der Unterschied zwischen dem Öffnen einer Verbindung und dem Abrufen eines inputStream und dem Öffnen eines Streams und dem Verwenden der csvreader-Klasse (wie der von Ihnen gepostete Link)? Ich schätze, die hier beschriebene Vorgehensweise ist allgemein und die andere unterstützt CSV-Dateien, aber was bringt der Nutzen der csvReader-Klasse? Für welche Zwecke ist csvReader gut? – Niminim

+0

Ich fürchte, ich kann es nicht beantworten, bin aber frei, um eine neue Frage zu stellen. – c0der