Csv-Datei einlesen

Lukas0521

Mitglied
Hallo zusammen,

ich möchte eine Tabelle im Csv Format, die ursprünglich 3 spalten hatte einlesen. Dabei würde ich später gerne auf jede ursprüngliche Zelle zugreifen. Zur Information es handelt sich um Länder und Infos dazu, also Text. Im Anhang habe ich einen Versuch gestartet, an dem aber gemeckert wird.

Vielen Dank!
 

Anhänge

  • Bildschirmfoto 2019-01-14 um 19.36.18.png
    Bildschirmfoto 2019-01-14 um 19.36.18.png
    488,1 KB · Aufrufe: 88

Robat

Top Contributor
Dann steht in deinem Array nicht das drin, was du erwartest ..
Wie sieht denn deine CSV-Datei aus. Als Separator hast du ein Semikolon .. als Kommentar steht aber "use comma as separator"
 

Lukas0521

Mitglied
Hab's gefunden, es stand noch Tabelle 1 drüber, nur zeigt r mir jetzt aufgrund der while schleife ja jedes erste Land an und nicht ausschließlich das aus der 1. Zeile, wie bekomm ich das noch hin?

Csv Datei sieht folgendermaßen aus:

Land1;Stadt;Bevölkerung;;;;
Land2;Stadt;Bevölkerung;;;;
Land3;Stadt;Bevölkerung;;;;
 
Zuletzt bearbeitet:

Robat

Top Contributor
Irgendwas muss wohl an deiner CSV-Datei falsch sein. Ich würde mir einfach mal den Array-Inhalt in der Schleife ausgeben lassen über Arrays.toString(..)
Ansonsten hier noch mal ein Beispiel:
Java:
String data = "Land1;Hauptstadt;Einwohner;;;;\n" + "Land2;Hauptstadt;Einwohner;;;;\n" + "Land3;Hauptstadt;Einwohner;;;;";
try( BufferedReader reader = new BufferedReader(new StringReader(data))) {
    String line = "";
    while((line = reader.readLine()) != null) {
        String[] parts = line.split(";");
        System.out.println(parts[0] + " " + parts[1] + " " + parts[2]);
    }
} catch ( IOException e ) {
    e.printStackTrace();
}
 

Lukas0521

Mitglied
Java:
[B]public[/B] [B]static[/B] [B]void[/B] main(String[] args) {
        String csvFile = "/Users/lukas/Desktop/laender.csv";
        String line = ";;;;";
        String cvsSplitBy = ";";
        [B]try[/B] (BufferedReader br = [B]new[/B] BufferedReader([B]new[/B] FileReader(csvFile))) {
            [B]while[/B] ((line = br.readLine()) != [B]null[/B]) {
                String[] country = line.split(cvsSplitBy);
                System.[B][I]out[/I][/B].println(country[0] + " " + country[1]);
            }
        } 
[B]       catch[/B] (IOException e) {
            e.printStackTrace();
        }

    }
Hier die Csv Datei, die ich leider nicht anhängen kann:

Land;Hauptstadt;Bevölkerung;;;;
Deutschland;Berlin;82.792.351;;;;
Italien;Rom;60483973;;;;
Österreich;Wien;8.822.267;;;;
Frankreich;Paris;66.991.000;;;;

Vielen Dank für deine Hilfe!

Als Rückgabe erhalte ich nun:
Land Hauptstadt
Deutschland Berlin
Italien Rom
Österreich Wien
Frankreich Paris

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

Also soweit liest er alles korrekt ein, nur würde ich jetzt bestimmen, dass er mir nur die Österreicher auslesen soll,... also dass die Zeilen noch durchnummeriert wären. Ansonsten klappt ja jetzt schonmal was
 

Robat

Top Contributor
Er liest noch nicht alles korrekt ein .. du bekommst ja eine ArrayIndexOutOfBoundsException.. kann es sein, dass du irgendwo in der CSV eine Leerzeile hast?
 

Lukas0521

Mitglied
Gehe gerade alles durch aber um was es mir geht ist wie ich das ganze jetzt noch nach den zeilen trennen könnte und sagen kann dass ich eine bestimmt abfragen möchte. Die exception hat es mir davor nicht angezeigt also bin ich ggf. einfach auf ne leertaste gekommen.
 

Lukas0521

Mitglied
Machst du doch schon durch (line = reader.readLine() - dadurch erhälst du ja ein zeilenweises Einlesen
Stimmt aber ich lese alles ein und ich würde gern sagen ich les nur die zweite Zeile ein... also sozusagen
(line = reader.readLine(ZAHL(also 1,2,3,...) aber ich kann da ja leider keine Zeile eintragen. Ich will also nur eine bestimmte Zeile einlesen. Sorry falls ich mich unklar ausgedrückt habe;). Und ich will diese Zeile auslesen unabhängig ob da Österreich oder sonst was drin steht...
 

Robat

Top Contributor
Du kannst nicht direkt auf eine Zeile einer Datei zugreifen. Wenn du Zeile x haben willst musst du vorher x-1 Zeilen einlesen. Aber du kannst ja mit einem Counter zählen, bei welcher Zeile du bist
 

Lukas0521

Mitglied
Es handelt sich um ein Informatik Projekt, und ich würde diese Werte später in Google, in das Suchfeld einfügen und z.B. die Bevölkerungszahl immer wieder aktualisieren, und dazu müsste ich einfach z.B. ein beliebiges Land nehmen aus der ersten Spalte der Tabelle und dann die dazugehörigen Daten dazu auch haben. Könnt ich also mit der ersten Zeile beginnen, diese eingeben und dann weiter machen mit der nächsten, ohne dass er gleich mir alle auf einmal ausliest?
 

Robat

Top Contributor
*Könntest* du machen, ja. Was sind denn die genauen Anforderungen an das Programm?
Das Programm soll die CSV-Datei einlesen, für die Länder/Städte die Bevölkerungszahlen aktualisieren und dann wieder in die CSV-Datei schreiben?
 

Robat

Top Contributor
Mir stellt sich da die Frage: Warum würdest du das wollen. Im Endeffekt musst du eh die Datei vorher komplett einlesen, bevor du die Daten aktualisieren kannst. Weil für das Schreiben gilt das gleiche wie für das Lesen - du kannst nicht einfach an Zeile x die Stelle y überschreiben.
Also lies die Daten doch einmal ein, pack sie in eine Klasse, aktualisiere die Daten, und schreib die aktualisierten Daten wieder in die Datei
Java:
class Entry {
   private String country;
   private String city;
   private long population;
   ....
}
Java:
List<Entry> entries = new ArrayList<>();
try(BufferedReader reader = new BufferedReader(...) {
   String line = "",
   while((line = reader.readLine()) != null) {
       Entry entry = parseEntry(line);
       entries.add(entry);
   }
} catch(IOException e) { .. }

// daten in entries überarbeiten
// daten neu in CSV Datei schreiben
 

Lukas0521

Mitglied
Würde es nicht einfacher gehen einfach country[0] einfach einer variablen zuzuweisen? Problem ist halt dass Integer ein String nicht so leicht zuweisen lässt... Würde also int country=country[0]; oder int city=country[1]; immer neu definieren, wäre meiner Ansicht nach weniger aufwändig, würde dies gehen?
 

Robat

Top Contributor
1. Sowohl country[0] als auch country[1] sind Strings (Land bzw Stadt) .. wie willst du diese in einer int Variable speichern?
2. Gehen tut vieles - mit einem Löffel bekomme ich den Nagel auch irgendwann in die Wand. Zumal ich das von oben nicht als aufwändig bezeichnen würde :p
 

Lukas0521

Mitglied
Oke int ginge nicht, aber dass ich diese dann als Variablen speichere und so einfüge, würde dies nicht gehen, mit Listen müsst ich mich erst einlesen...;(. Weil wenn ich
Java:
Country[0]
eingebe kommt er nicht darauf klar, sondern führt es natürlich nicht aus...
 

Robat

Top Contributor
Angenommen du würdest es so machen und country[0] in irgendeiner Variable speichern. Was hast du dann davon. Was würdest du dann damit machen wollen? Also wie würdest du dann weiter vorgehen wollen?
 

Lukas0521

Mitglied
Ich würde sozusagen bevor ich diese in einer Liste speichere, würde ich einfach nachdem die erste Zeile ausgelesen wurde, diese in Google eingeben und vergleichen, und dann wird ja durch die while schleife die zweite Zeile ausgelesen und diese würd ich dann abgleichen, und immer so weiter...:)
Würde dies dann mit
Java:
Desktop.[I]getDesktop[/I]().browse([B]new[/B] URI("www.google.de/#q="+Variable));
suchen.
klappt leider nicht mit string, definiere ich aber mit integer eine zahl zuvor, wird diese in google gesucht
 
Zuletzt bearbeitet:

Robat

Top Contributor
Ich würde sozusagen bevor ich diese in einer Liste speichere, würde ich einfach nachdem die erste Zeile ausgelesen wurde, diese in Google eingeben und vergleichen,
Das kannst du ja theor. machen, also direkt den neuen/aktualisierten Wert abspeichern. Nur hättest du ja auch hier wieder eine Liste (wo du selber sagst, dass du dich erstmal einlesen musst) ;)
 

Lukas0521

Mitglied
Also komm ich um die Liste nicht drumrum oder? Welche Art muss ich dann nehmen, dass ich später die Vatiable mit dem Ländernamen der Liste zum Link oben hinzufügen kann
 

Robat

Top Contributor
Also komm ich um die Liste nicht drumrum oder
Du kannst auch Arrays nehmen. Bloß hast du dann das Problem, dass du nicht weißt wie viele Elemente du brauchst. Du müsstest das Array also nach jeder Iteration vergrößern.
Welche Art muss ich dann nehmen
ArrayList zB. Am sinnigsten wäre es, wie gesagt, eine eigene Klasse dafür zu erstellen, die Land, Stadt und Bevölkerung speichert. Du erstellst dann eine Liste, die Elemente von dieser Klasse beinhaltet.
 

Lukas0521

Mitglied
Java:
ArrayList<String> arr = [B]new[/B] ArrayList<>();
                arr.add(country[0]);
                arr.add(country[1]);
                arr.add(country[2]);
Wie kann ich dann auch diese Liste zugreifen? Und Country[0] abfragen?
 

Robat

Top Contributor
Über arr.get(0), arr.get(1), ... das wird dir aber in der Form wenig bringen. Wenn du es unbedingt ohne eigene Klasse machen willst, dann solltest du das komplette Array in der Liste abspeichern.
Java:
List<String[]> entries = new ArrayList<>();
try(BufferedReader reader = new BufferedReader(...) {
   String line = "",
   while((line = reader.readLine()) != null) {
       String[] entry = line.split(";");
       entries.add(entry);
   }
} catch(IOExceptione) { .. }

entries.get(0)[0] // -> Land des ersten Datensatzes
entries.get(1)[0] // -> Land des zweiten Datensatzes 
// ....
 

Lukas0521

Mitglied
Bei mir passt da immer noch was nicht. Irgendwie kann ich entries noch nicht bekommen. Diese will ich dann hinter den Link setzen.
 

Anhänge

  • Bildschirmfoto 2019-01-15 um 17.35.26.png
    Bildschirmfoto 2019-01-15 um 17.35.26.png
    596,9 KB · Aufrufe: 33

Lukas0521

Mitglied
Hab geschafft was ich wollte, vielen vielen danke für deine Hilfe erstmal, hab jetzt nur noch das Problem, dass beim mir Leerzeichen ein Problem darstellen. Wie kann ich diese z.B. durch einen anderen Buchstaben ersetzen? Zur Not halt einfach ignorieren...
 
Zuletzt bearbeitet:

Lukas0521

Mitglied
Mit System.outprint gibt er es mir richtig aus, nur öffnet er die website nicht, auch wenn in dieser ein ö stehen kann, hab ich schon ausprobiert. Ohne ö klappts... Und wie nehme ich dann automatisch den ersten Treffer?
 

mihe7

Top Contributor

Robat

Top Contributor
Das was du, glaube ich zumindest, eher suchst, ist eine API, die dir für ein Land die aktuelle Bevölkerungszahl gibt.
Dazu kannst du bspw. http://api.population.io/ nehmen.
Wenn du einen GET Request an bspw http://api.population.io/1.0/population/Germany/today-and-tomorrow bekommst du eine Response mit folgenden Body
Code:
    "total_population": [
       {
           "date": "2019-01-15",
           "population": 80513629
       },
       {
           "date": "2019-01-16",
           "population": 80513393
       }
   ]

Klar kannst du auch: Wikipedia-Artikel aufrufen -> Bevölkerungszahl parsen -> ... aber das ist wesentlich mehr Aufwand als ein einfacher HTTP-Request
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
B ST Datei einlesen AWT, Swing, JavaFX & SWT 1
R Swing XML Datei in JTree, Problem mit Daten einlesen AWT, Swing, JavaFX & SWT 34
J Einlesen aus Datei AWT, Swing, JavaFX & SWT 2
A Datei einlesen und Inhalt in JList (Tabbed Pane) anzeigen? AWT, Swing, JavaFX & SWT 11
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
princess_sara1997 .jar Datei führt den Code nicht richtig aus AWT, Swing, JavaFX & SWT 19
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
MasterCaution Swing .jar Datei ausführen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
N Ausführbare Datei aus JavaFX Projekt erstellen AWT, Swing, JavaFX & SWT 22
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
J *.jar öffnet PDF-Datei nicht AWT, Swing, JavaFX & SWT 35
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
F FXML Datei aus dem SceneBuilder in Eclipse aufrufen AWT, Swing, JavaFX & SWT 1
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
P JavaFX - XCF Datei von Gimp kann nicht angezeigt werden AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
F Pfad von eingelesener Datei AWT, Swing, JavaFX & SWT 10
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
D JavaFX Jar Datei Signieren mit Java 8u45 AWT, Swing, JavaFX & SWT 2
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
M Swing PDF Datei nach drucken nicht löschbar AWT, Swing, JavaFX & SWT 6
A Databinding in FXML-Datei AWT, Swing, JavaFX & SWT 1
H 2D-Grafik .EPS Datei in .PNG konvertieren AWT, Swing, JavaFX & SWT 1
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
F Swing Java Swing Array in Datei und wieder raus AWT, Swing, JavaFX & SWT 7
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
B JAVAFX und CSS Datei in Eclipse AWT, Swing, JavaFX & SWT 4
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
S Aus XML Datei FXML generieren AWT, Swing, JavaFX & SWT 4
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
T Aus JAVA.Jar GUI eine Flash-Datei machen AWT, Swing, JavaFX & SWT 3
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Datei in jar öffnen AWT, Swing, JavaFX & SWT 11
W Funktion aus einer Java Datei in eine andere einbauen AWT, Swing, JavaFX & SWT 25
P Neue Datei erstellen in JPanel AWT, Swing, JavaFX & SWT 5
N Speicherpfad für Datei auswählen AWT, Swing, JavaFX & SWT 2
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
T SWT:Datei speichern / öffnen AWT, Swing, JavaFX & SWT 6
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
M Swing XML Datei in JTable darstellen + verändern AWT, Swing, JavaFX & SWT 3
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
N Swing TreePath Datei öffnen AWT, Swing, JavaFX & SWT 7
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
T Info Datei AWT, Swing, JavaFX & SWT 3
J ImageIcon: ZipException bei ungültiger PNG-Datei AWT, Swing, JavaFX & SWT 2
W jar Datei öffnen AWT, Swing, JavaFX & SWT 4
W TrayIcon mit jdic (Problem bei .jar Datei) AWT, Swing, JavaFX & SWT 3
D Nodes eines statischen JTrees sollen auf Anker (Textmarken) in einer HTML-Datei zeigen AWT, Swing, JavaFX & SWT 8
M AWT Datei auf server speichern und beschreiben AWT, Swing, JavaFX & SWT 7
P JMenu-Erweiterung in externer Datei AWT, Swing, JavaFX & SWT 5
M Text in txt-Datei in letzte Zeile schreiben? AWT, Swing, JavaFX & SWT 14
X Swing Inhalt einer JEditorPane in Datei abspeichern AWT, Swing, JavaFX & SWT 5
E Datei in TextArea anzeigen AWT, Swing, JavaFX & SWT 12
data89 Nimbus Look and Feel als gepackte JAR-Datei AWT, Swing, JavaFX & SWT 3
S Auswahlfenster: Datei beim Doppelklick öffnen AWT, Swing, JavaFX & SWT 8
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
M Text-Datei in einem JFrame öffen? AWT, Swing, JavaFX & SWT 2
Fadi Images in JAR Datei laden? AWT, Swing, JavaFX & SWT 5
K Hyperlink als Datei identifizieren AWT, Swing, JavaFX & SWT 2
S Jar-Datei funktioniert nicht richtig AWT, Swing, JavaFX & SWT 3
1 Laden einer Datei zur Echtzeit Darstellen AWT, Swing, JavaFX & SWT 7
P Problem bei Datei zur Verwaltung von Tabs AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben