# sporadischer Fehler beim Schreiben auf NAS



## _ardbeg_ (16. Jan 2018)

Hallo liebes Forum,
ich brauche Eure Hilfe beim Auffinden eines Fehlers in meinem Programm.
Das Programm läuft auf einen Raspberry mit Raspbian Betriebssystem in einem geschlossenen Heimnetz. Das Programm ließt regelmäßig unterschiedliche Daten aus meiner Heizung und schreibt diese formatiert auf mein NAS. Anbei der Code:

```
//Variablen deklarieren und initialisieren
   public static JFrame frame;
   public static JTextField textField = new JTextField();

   public static void main(String[] args) throws IOException, InterruptedException{
      
       EventQueue.invokeLater(new Runnable() {
           public void run() {
              
               frame = new JFrame();
               frame.setBounds(100, 100, 450, 300);
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
               frame.getContentPane().add(textField, BorderLayout.NORTH);
               textField.setColumns(10);
           }
       });
      
      
      
       Verbindung meineVerbindung = new Verbindung();
       PrintWriter meinWriter = null;
       String sStatus_HKPumpe;
       String sTemperatur;
       String sVerbrauch ;
       String sVerbrauch_Start;
       String sWW_Temperatur;
       String sPuffer_Oben_Temperatur ;
       String sPuffer_Unten_Temperatur ;
       String sKessel_Temperatur;
       String sDrehzahl_Luefter ;
       String sTextzeile;
       String sDatumAlt;
       String PfadLinux;
       @SuppressWarnings("unused")
       String PfadWin;
       String sPfad;

       PfadLinux = "/???/Datenlogger_";
       PfadWin = "C:\\???\\Datenlogger_";
       sPfad = PfadLinux; //PfadWin;
       Format zeitstempel = new SimpleDateFormat("HH:mm");
       Format dateiendung_datum = new SimpleDateFormat ("dd.MM.yy");
       meinWriter = new PrintWriter(new BufferedWriter(new FileWriter(sPfad + dateiendung_datum.format(new Date()) + ".txt")),true);
       sVerbrauch_Start = meineVerbindung.lies_Wert(IP_Verbrauch);
        sTextzeile = "Stand Verbrauch bei Dateierstellung:" + sVerbrauch_Start + ";" + "Status_HK_Pumpe;Au�entemperatur;Verbrauch;WWTemperatur;Puffer_Oben;Puffer_Unten;Kessel_Temp;Drehzahl;Zeitstempel" ;
       meinWriter.println(sTextzeile);
       meinWriter.flush();
       //meinWriter.close();
       sDatumAlt = dateiendung_datum.format(new Date());
        while (true) {
           //if abfrage, ob datum neu
           //System.out.println(dateiendung_datum.format(new Date()));
           if (dateiendung_datum.format(new Date()).equals(sDatumAlt)){
                  
           }
           else{
               meinWriter.close();
               sVerbrauch_Start = meineVerbindung.lies_Wert(IP_Verbrauch);
               meinWriter = new PrintWriter(new BufferedWriter(new FileWriter(sPfad + dateiendung_datum.format(new Date()) + ".txt")),true);
               //System.out.println("TESTAUSGABE"); //sVerbrauch_Start);
               sDatumAlt = dateiendung_datum.format(new Date());
               sTextzeile = "Stand Verbrauch bei Dateierstellung:" + sVerbrauch_Start + ";" + "Status_HK_Pumpe;Au�entemperatur;Verbrauch;WWTemperatur;Puffer_Oben;Puffer_Unten;Kessel_Temp;Drehzahl;Zeitstempel" ;
               meinWriter.println(sTextzeile);
               meinWriter.flush();
               //aktuellen Verbrauch als Startwert speichern für Tagesverbrauchberechnung
              
               //meinWriter.close();
           }
          
           if (meineVerbindung.lies_Wert(IP_Status_HKPumpe).equals("Ein")){
               sStatus_HKPumpe = "1";
           }
           else {
               sStatus_HKPumpe = "0";
           }
           sTemperatur = meineVerbindung.lies_Wert(IP_Temperatur);
           sVerbrauch = meineVerbindung.lies_Wert(IP_Verbrauch);
           sWW_Temperatur = meineVerbindung.lies_Wert(IP_WW_Temperatur);
           sPuffer_Oben_Temperatur = meineVerbindung.lies_Wert(IP_Puffer_Oben_Temperatur);
           sPuffer_Unten_Temperatur = meineVerbindung.lies_Wert(IP_Puffer_Unten_Temperatur);
           sKessel_Temperatur = meineVerbindung.lies_Wert(IP_Kessel_Temperatur);
           sDrehzahl_Luefter = meineVerbindung.lies_Wert(IP_Drehzahl_Luefter);
           sTextzeile = "";
           sTextzeile = sStatus_HKPumpe + ";" + sTemperatur + ";" + sVerbrauch + ";" + sWW_Temperatur+ ";" + sPuffer_Oben_Temperatur + ";" + sPuffer_Unten_Temperatur + ";" + sKessel_Temperatur+ ";" + sDrehzahl_Luefter+ ";" +  zeitstempel.format(new Date()) ;
           //System.out.println();
           //meinWriter = new PrintWriter(new BufferedWriter(new FileWriter(sPfad + sDatumAlt + ".txt")),true);
           meinWriter.println(sTextzeile);
           meinWriter.flush();
           //meinWriter.close();
           textField.setText("Programm läuft; letzter Schrieb um: " + zeitstempel.format(new Date()) );

           Thread.sleep(300000);
          
        }
        //meinWriter.close();
    }
}
```
 

Es funktioniert soweit alles prima, aber ich bekomme sporadisch Fehler in der Textdatei, dass nicht zeilenweise geschrieben wird, so mehrmals hintereinander in die selbe Zeile geschrieben wird; dazu als Beispiel die hochgeladenen Textdateien.

Kann sich einer von Euch erklären, woher das kommt? Es tritt in manchen Dateien gar nicht auf, manchmal nur einmal oder aber auch mehrmals und an beliebiger Stelle.
Ich hoffe, jemand kann helfen!
Besten Dank vorab für Eure Unterstützung und viele Grüße
_ardbeg_


----------



## mrBrown (17. Jan 2018)

Schreibt wirklich nur dieses Programm in die Datei?

Es ist schon auffällig, dass es immer dann der Fall ist, wenn `sDrehzahl_Luefter` nicht 0 ist, und dann auch zusätzliche Semikolon eingefügt werden...


----------



## _ardbeg_ (17. Jan 2018)

Hallo Mr Brown,

danke für Deine schnelle Rückmeldung.

Der Hinweis mit dem 
	
	
	
	





```
sDrehzahl_Luefter
```
 ist schon mal ein Anfang; mir selbst ist das vor lauter Bäumen gar nicht mehr aufgefallen. Es scheint eine notwendige, aber leider nicht hinreichende Bedingung zu sein, da ich auch Dateien habe, in denen alles gut ist, obwohl der Wert nicht 0 ist, beim nächsten mal gibt es an der Stelle aber wieder ein Problem (siehe hochgeladene Datei).
Auffällig ist für mich auch, dass das formatierte Datum nicht richtig dargestellt wird; vielleicht ist das Problem irgendwo hier zu suchen?
Da ich nur ein Raspberry hab, der irgendetwas in diesem Verzeichnis tut, und nur ein Frame auf dem Desktop des Raspberrys zu sehen ist, gehe ich schon sehr sehr stark davon aus, dass sonst nichts auf die Datei zugreift.
Hast Du/habt Ihr noch weitere Ideen? Oder Vorschläge, wie ich das Problem am besten eingrenze?
Danke und viele Grüße
Lukas


----------

