2017-12-08 7 views
1

Ich scheine etwas zu verpassen, wenn es darum geht, doubles in Textdateien zu schreiben, wenn ich die Datei überprüfe, ist nur Leerzeichen vorhanden. Wenn ich von der Datei lese und mit System.out.println() drucke; es druckt nur nichts ... Was läuft hier falsch? Muss ich etwas konvertieren?Probleme beim Schreiben von Doubles in Dateien, Schreiben nichts

import java.io.*; 
import javax.swing.JOptionPane; 

public class ReadCalcAveragePrint { 

    double firstNum; 
    double secondNum; 
    double average; 

    public void readFile() { 

     try { 
      File f = new File("numbers.txt"); 
      BufferedReader br = new BufferedReader(new FileReader(f)); 
      String one = br.readLine(); 
      String two = br.readLine(); 
      firstNum = Double.parseDouble(one); 
      secondNum = Double.parseDouble(two); 

      average = (firstNum + secondNum)/2; 
      JOptionPane.showMessageDialog(null, average, "title", JOptionPane.PLAIN_MESSAGE); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println(e); 
     } 

    } 

    public void writeFile() { 
     try { 
      File f = new File("result.txt"); 
      FileOutputStream fos = new FileOutputStream(f); 
      DataOutputStream dos = new DataOutputStream(fos); 
      dos.writeDouble(average); 
      dos.flush(); 
      fos.close(); 
      System.out.println("Printed."); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println(e); 

     } 
    } 

    public void readResult() { 

     try { 
      File f = new File("result.txt"); 
      BufferedReader br = new BufferedReader(new FileReader(f)); 
      String one = br.readLine(); 
      System.out.println(one); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println(e); 
     } 

    } 

    public static void main(String[] args) { 

     new ReadCalcAveragePrint().readFile(); 
     new ReadCalcAveragePrint().writeFile(); 
     new ReadCalcAveragePrint().readResult(); 
    } 
} 

Antwort

3

In der main Sie erstellen drei verschiedene Objekte, nur die erste, die Zahlen enthalten wird Sie aus der Datei gelesen.

Sie sollten nur erstellen und wiederverwenden ein Objekt:

public static void main(String[] args) { 
    ReadCalcAveragePrint obj = new ReadCalcAveragePrint(); 
    obj.readFile(); 
    obj.writeFile(); 
    obj.readResult(); 
} 

Auch werden Sie die Ergebnisdatei zu schreiben DataOutputStream verwendet, die die Daten in binärer Form zu schreiben, zu verstehen ist. Wenn Sie nur das Ergebnis als Text speichern möchten, sollten Sie FileWriter statt:

File f = new File("result.txt"); 
FileWriter fw = new FileWriter(f); 
fw.write(String.valueOf(average)); 
fw.close(); 
0

siehe javadoc von write:

Wandelt das Doppel Argument für eine lange Verwendung der doubleToLongBits Methode in der Klasse Double, und schreibt dann den langen Wert in den zugrundeliegenden Ausgabestrom als eine 8-Byte-Menge, wobei das erste hohe Byte ist.

Sie schreiben 8 Bytes, die keinem alphanumerischen Zeichen zugewiesen werden können. Dann liest du eine Zeile als String (Zeichen bis zum nächsten 'new line' char). In diesem Fall kann das Zeichen 'neue Zeile' irgendwo oder nirgendwo sein (abhängig vom Ergebnis).

8 Bytes in Datei bedeutet fast 4 Zeichen, sehr wahrscheinlich, niemand ist ein "sichtbares Zeichen".

Versuchen Sie, eine byte[8] vom Input (nicht von einem Buffered eins), lesen und dann die 8 Bytes in DoubleBuffer setzen, dann können Sie den doppelten Wert von diesen Bytes dargestellt bekommen und bevor in die Datei writen.