2016-04-24 23 views
-1

Ich muss lesen eine Textdatei in die Konsole, und dann schreiben es wieder drin. Ich konnte die Datei auf der Konsole lesen, aber wenn ich zurück schreibe und versuche, es beim nächsten Mal zu lesen, ist die Datei leer. Kann mir jemand sagen, wo ich Fehler mache?Java Schreiben in eine Textdatei

ist hier der Code für das Original File Lesen

public static ArrayList<Sales> readSaleData(ArrayList<Sales> sale) { 

    System.out.println(); 

    ArrayList<Sales> sales = new ArrayList<Sales>(); 

    Frame f = new Frame(); 
    FileDialog saveBox = new FileDialog(f, "Reading text file", FileDialog.LOAD); 
    saveBox.setVisible(true); 
    String salePrice = saveBox.getFile(); 
    String fileSavePlace = saveBox.getDirectory(); 

    File inFile = new File(fileSavePlace + salePrice); 

    BufferedReader in = null; 
    try { 
     in = new BufferedReader(new FileReader(inFile)); 
     String line; 

     int weekCount = 0; 

     while (((line = in.readLine()) != null)) { 
      weekCount++; 
      System.out.println("Week " + weekCount + "\t$" + line.replace(",", " $")); 
      String[] saleData = line.split(","); 
      for (String data : saleData) { 
       double price = Double.parseDouble(data); 
       Sales s = new Sales(price); 
       sales.add(s); 
      } 
     } 

    } catch (IOException io) { 
     System.out.println("There Was An Error Reading The File"); 
     io.printStackTrace(); 
    } finally { 
     try { 
      in.close(); 
     } catch (Exception e) { 
     } 
    } 
    return sales; 
} 

Here Is a Image Of It After It Was Read To The Console

Und hier ist der Code für es in einer Textdatei Schreiben auf diese

public static void writeSaleToTextFile(ArrayList<Sales> s) { 

    Frame f = new Frame(); 

    FileDialog foBox = new FileDialog(f, "Saving invoice information", FileDialog.SAVE); 
    foBox.setVisible(true); 

    String saleName = foBox.getFile(); 
    String dirPath = foBox.getDirectory(); 

    File outFile = new File(dirPath + saleName); 

    PrintWriter out = null; 
    try { 
     out = new PrintWriter(new BufferedWriter(new FileWriter(outFile))); 

     System.out.println("Going in"); 

     for (int i = 0; i < s.size(); i++) { 
      Sales sale = s.get(i); 

      out.println(sale.toString()); 
      System.out.println("This is the file size" + sale); 
     } 

     System.out.println("Coming Out"); 
    } 
    catch (IOException io) { 
     System.out.println("An IO Exception occurred"); 
     io.printStackTrace(); 
    } finally { 

     try { 
      out.close(); 
     } catch (Exception e) { 
     } 
    } 
} 
+1

Sie keine Ausgabe erhalten Ändern Sie auf die Konsole beim Schreiben dieser Datei? Ich meine, Sie haben einige 'System.out.println' Aufrufe in Ihrer Methode. Was bekommst du? – Seelenvirtuose

+0

Sie rufen keine Flush-Methode auf. Probieren Sie es aus und lassen Sie es uns wissen. –

+1

@GD_Java - Aber er >> ruft '' 'close()', was einen Flush machen wird. –

Antwort

1

Basierend ...

Der Ein OutPut bekomme ich "geht rein" und "kommt raus". I Do Der andere Ausgang nicht bekommen „Dies ist die Dateigröße“

... das Problem ist, dass Sie writeSaleToTextFile auf eine leere Liste anrufen. Das ist die einzige plausible Erklärung für diese Konsolenausgabe ... vorausgesetzt, der Code ist so, wie Sie uns gezeigt haben.

Sehen Sie sich den Code an, in dem Sie anrufen readSaleData und writeSaleToTextFile und überprüfen Sie, ob sie die gleiche Liste wirklich lesen/schreiben.

1

Obwohl nicht direkt klar, Ihr Problem scheint in der aufrufenden Code und in der Lese-Methode zu sein.

Ihre Lesemethode Unterschrift ist, dass:

public static ArrayList<Sales> readSaleData(ArrayList<Sales> sale) 

Dies scheint falsch zu sein, wie Sie eine Liste erwarten das Verfahren zur Verfügung gestellt werden, aber du ein anderes von ihm zurück.

So vermute ich nun den Code, der Ihre Lese Anrufe und Schreibverfahren, so etwas zu sein:

ArrayList<Sales> someList = new ArrayList<>(); 
readSaleData(someList); // This will disregard the return value 
writeSaleToTextFile(someList); 

Als Aufruf der read-Methode ignoriert die Ergebnisliste, Ihre ursprüngliche Liste noch leer ist, wenn Aufruf die Schreibmethode. Daher die Ausgabe, die deutlich anzeigt, dass Sie die Schreibmethode in einer leeren Liste aufrufen.

Sie sollten die Lesemethode Unterschrift zu

public static ArrayList<Sales> readSaleData() 

korrigieren Dann können Sie es nicht nennen, wie ich erwähnt, und Sie müssen den aufrufenden Code

ArrayList<Sales> someList = readSaleData(); 
writeSaleToTextFile(someList);