2016-04-24 8 views
-1

У меня есть текстовый файл в консоли, а затем напишите его обратно в него. Мне удалось прочитать файл на консоли, но когда я напишу его и попробую прочитать его в следующий раз, файл пуст. Может ли кто-нибудь сказать мне, где я ошибаюсь?Java Запись в текстовый файл

Вот код для чтения оригинального файла

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

И вот код для написания его в текстовый файл

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

Вы получаете любой выход на консоль во время записи этого файла? Я имею в виду, что в вашем методе есть несколько вызовов System.out.println. Что вы получаете? – Seelenvirtuose

+0

Вы не используете метод flush. Попробуйте и сообщите нам. –

+1

@GD_Java - Но он >> является << вызовом 'close()', который будет делать флеш. –

ответ

1

Основываясь на этом ...

The On я OutPut, я получаю «Going In» и «Coming Out». Я не получаю другой OutPut, «Это размер файла»

... проблема в том, что вы вызываете writeSaleToTextFile в пустой список. Это единственное правдоподобное объяснение для этого консольного вывода ... если предположить, что код, как вы показали нам.

Просмотрите код, где вы звоните readSaleData, и writeSaleToTextFile и убедитесь, что они действительно читают и записывают один и тот же список.

1

Хотя непонятно, ваша проблема, кажется, в коде вызова и методе чтения. подпись

Вашего метода чтения является то, что:

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

Это, кажется, не так, как вы ожидаете, список будет предоставляться метод, но вы возвращаете другую из него.

Так что я теперь подозреваю, что код, который вызывает ваше чтение и метод записи, что-то вроде этого:

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

В вызове метода чтения пренебрегает список результатов, ваш первоначальный список еще пуст при вызове метод записи. Следовательно, вывод, который четко указывает, что вы вызываете метод записи в пустом списке.

Вы должны исправить подпись метода чтения, чтобы

public static ArrayList<Sales> readSaleData() 

Тогда вы не можете назвать это как я уже говорил, и вы должны изменить код вызывающих

ArrayList<Sales> someList = readSaleData(); 
writeSaleToTextFile(someList); 
Смежные вопросы