Fehler beim Datei auslesen (nur unter Windows)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Fehler beim Datei auslesen (nur unter Windows)

    Moin,
    ich habe ein kleines Programm geschrieben, dass unter Linux problemlos Funktioniert, aber unter Windows gibt's Probleme beim korrekten auslesen der Daten, die zuvor in einer Datei gespeichert wurden. Es geht um folgende Methode:

    Quellcode

    1. public void readFile() {
    2. double[] gas = new double[12];
    3. double[] power = new double[12];
    4. double[] water = new double[12];
    5. double[] prevGas = new double[12];
    6. double[] prevPower = new double[12];
    7. double[] prevWater = new double[12];
    8. String[] comment = new String[12];

    Ich verwende zum auslesen einen Scanner. Als delimiter habe ich "/" gesetzt, da ich am Ende auch Texte mit Leerzeichen abspeichern möchte..

    Quellcode

    1. try {
    2. Scanner source = new Scanner(new File(folder+File.separator+year), "UTF8");
    3. source.useDelimiter(delimiter);

    Die folgenden Daten werden unter Windows nicht eingelesen und ich habe keine Ahnung warum.

    Quellcode

    1. for (int i=0; i<12 && source.hasNextDouble(); i++) {
    2. if (source.hasNextDouble()) {
    3. gas[i] = source.nextDouble();
    4. }
    5. }
    6. for (int i=0; i<12 && source.hasNextDouble(); i++) {
    7. if (source.hasNextDouble()) {
    8. power[i] = source.nextDouble();
    9. }
    10. }
    11. for (int i=0; i<12 && source.hasNextDouble(); i++) {
    12. if (source.hasNextDouble()) {
    13. water[i] = source.nextDouble();
    14. }
    15. }
    16. for (int i=0; i<12 && source.hasNextDouble(); i++) {
    17. if (source.hasNextDouble()) {
    18. prevGas[i] = source.nextDouble();
    19. }
    20. }
    21. for (int i=0; i<12 && source.hasNextDouble(); i++) {
    22. if (source.hasNextDouble()) {
    23. prevPower[i] = source.nextDouble();
    24. }
    25. }
    26. for (int i=0; i<12 && source.hasNextDouble(); i++) {
    27. if (source.hasNextDouble()) {
    28. prevWater[i] = source.nextDouble();
    29. }
    30. }
    Alles anzeigen

    Hier wird etwas ausgelesen, aber die ersten 12 Datensätze, die in der Datei gespeichert sind und es sollten eigentlich Datensatz 73-84 ausgelesen werden...

    Quellcode

    1. for (int i=0; i<12 && source.hasNext(); i++) {
    2. if (source.hasNext()) {
    3. comment[i] = source.next();
    4. }
    5. }
    6. } catch(Exception e) {
    7. System.out.println(e);
    8. System.out.println("Die Datei wird beim Speichern angelegt.");
    9. }
    10. setGas(gas);
    11. setPower(power);
    12. setWater(water);
    13. setPrevGas(prevGas);
    14. setPrevPower(prevPower);
    15. setPrevWater(prevWater);
    16. setComment(comment); }
    Alles anzeigen


    Ich habe mich wirklich bemüht den ganzen Code einigermaßen Plattformunabhängig zu schreiben, aber das hat scheinbar nicht geklappt, ich habe aber keine Ahnung, warum unter Windows die Doubles nicht ausgelesen werden können und hoffe deswegen auf einen Hinweis. :)
    Beim schreiben des Textes ist mir jetzt eingefallen, dass ich die Doubles auch erst als String einlesen könnte und dann eine Umwandlung in Double machen könnte, das werde ich gleich mal ausprobieren, dennoch würde ich gern wissen, wo mein Fehler jetzt lag.
    Außerdem suche ich noch nach einer eleganteren Methode die Daten abzuspeichern. Eine Datenbank kommt eigentlich nicht in Frage, da zur Nutzung des kleinen Programms nichts zusätzlich installiert werden sollte. Ich hab daran gedacht das eventuell mit XML zu probieren, ist das eine übliche Methode kleinere Datenmengen abzuspeichern oder gibt es da bessere Alternativen?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von af-fe ()

  • Hi, wenn du nach echten Methoden suchst, dann solltest du schonmal ganz auf Scanner verzichten.
    Seit Java 1.5 gibt es Streams, und die sind wesentlich schneller.
    Zu meinen Java Anfängen habe ich hier mal ein Beispiel gepostet: Java Streams: Dateioperationen

    XML ist schon eine gängige Praxis. Falls es aber komplexer wird, du Joins haben willst, etc. - dann solltest du SQLite mitliefern:
    zentus.com/sqlitejdbc/