2009-03-29 4 views
0

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

import java.util.ArrayList; 
import java.io.FileWriter; 
import java.util.Iterator; 

/** 
* A class to maintain an arbitrarily long list of notes. 
* Notes are numbered for external reference by a human user. 
* In this version, note numbers start at 0. 
* 
* @author David J. Barnes and Michael Kolling. 
* @version 2008.03.30 
*/ 
public class Notebook { 
    // Storage for an arbitrary number of notes. 
    private ArrayList<String> notes; 

    /** 
    * Perform any initialization that is required for the 
    * notebook. 
    */ 
    public Notebook() { 
     notes = new ArrayList<String>(); 
    } 

    /** 
    * Store a new note into the notebook. 
    * @param note The note to be stored. 
    */ 
    public void storeNote(String note) { 
     notes.add(note); 
    } 

    /** 
    * @return The number of notes currently in the notebook. 
    */ 
    public int numberOfNotes() { 
     return notes.size(); 
    } 

    /** 
    * Remove a note from the notebook if it exists. 
    * @param noteNumber The number of the note to be removed. 
    */ 
    public void removeNote(int noteNumber) { 
     if(noteNumber < 0) { 
      // This is not a valid note number, so do nothing. 
     } else if(noteNumber < numberOfNotes()) { 
      // This is a valid note number. 
      notes.remove(noteNumber); 
     } else { 
      // This is not a valid note number, so do nothing. 
     } 
    } 

    /** 
    * List all notes in the notebook. 
    */ 
    public void listNotes() { 
     for(String note : notes) { 
      System.out.println(note); 
     } 
    } 

    /** 
    * 
    */ 
    public void writeToFile() { 
     try{ 
      FileWriter writer = new FileWriter("file.txt"); 

      for(String str : notes){ 
       writer.write(str.toString()); 
      } 
     } 
     catch(Exception e){ 
      System.out.println("some error..."); 
     } 
    } 
} 

редактировать: проблема, которую я имею сейчас, что я не могу получить каждую строку на новую строку, даже если я использую writer.write('\n'), я понял, что я забыла writer.close();;)

+0

Что происходит, когда вы создаете ноутбук, добавить некоторые примечания к ней, а затем вызвать ваш метод WriteToFile()? –

+0

ничего не произошло до тех пор, пока я не осознал, что пропустил писатель.close после цикла: p проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу получить каждую строку на новой строке, даже если я использую writer.write ('\ n'). – 2009-03-29 15:53:35

+0

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

ответ

1

Вы хотите взгляните на закрытие FileWriter при завершении. В противном случае, что заставляет FileWriter завершить его работу?

2

вещь, которые выглядят не так со мной:

  • вызова ToString() на строке является чистой тратой
  • писателя никогда не закрывается
  • ноты записывается в файл без какого-либо разделителя между ними. Файл может быть трудночитаемым.
0

У вас нет возможности разграничить строки, поэтому, когда вы их заново прочитаете, вы не узнаете, где заканчивается одна строка, а следующая начинается. Так как строки Java являются Unicode, в файл, который не будет законно находиться в ваших строках, вы можете написать несколько вещей. Поэтому я бы рекомендовал написать int, представляющий длину строки, а затем строку, чтобы вы знали, сколько нужно читать. И наоборот, вы можете изучить методы сериализации Java и просто сериализовать весь список в файл.

Но опять же, я парень базы данных, и мне больше всего нравится PreparedStatements и ResultSets, поэтому я, вероятно, просто сделаю все это как базу данных SQLite.

1

Получить свойство новой системы в строковой переменной.

Строка newline = System.getProperty ("line.separator");

Затем в файл write module добавьте новую строку в конец каждой строки.

writer.write (str.toString() + newline);

1

без изменения кода очень ...

try{ 
    PrintWriter writer = new PrintWriter(new FileWriter("file.txt")); 

    for(String str : notes){ 
     writer.println(str.toString()); 
    } 
Смежные вопросы