2011-12-19 47 views
0

私はクラスに保持されているクラスRoomのarraylistを持っています。このarraylistをテキストファイルに書きたいと思います。それを行う最も効率的な方法は何ですか?テキストファイルにarraylistを書き込む

ホステルクラス

public class Hostel 
{ 
    private ArrayList <Room> rooms; 
} 

ルームクラス

abstract class Room 
{ 

public Room(int newRoomNo, boolean newRoomEnSuite, int newRoomNights, String  newRoomBooker) 
    { 
     roomNo = newRoomNo; 
     roomEnSuite = newRoomEnSuite; 
     roomBooking = "Booked"; 
     roomNights = newRoomNights; 
     roomBooker = newRoomBooker; 
    } 
} 
+0

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.htmlを参照してください。 –

+0

パラメータとして渡されたファイルに1つのルームを書き込むメソッドを作成します。次に、ファイルを開き、forループを使用してarraylistを繰り返し、それぞれの 'Room'インスタンスを記述し、ファイルを閉じます。不確かな場合は、Googleを使用してください。 – 9000

答えて

5

ワンライナーcommons-io

FileUtils.writeLines(new File(path), list); 
+0

これはlists要素の 'toString()'メソッドを使っていると思います。 – Stephan

+0

@Stephanそうではありません。ファイルとコレクションを取る方法があります – Bozho

+0

そして、コレクションの要素はどのように書かれていますか? – Stephan

3
import java.io.*; 
import java.util.ArrayList; 

public class Hostel { 
    public void writeRooms(ArrayList<Room> rooms){ 
     for (int i = 0; i < rooms.size(); i++) { 
      write(rooms[i]); 
     } 
    } 
    void write(Room room) throws IOException { 
     Writer out = new OutputStreamWriter(new FileOutputStream("FileName")); 
     try { 
      out.write(room.roomNo + ";" + roomEnSuite + ";" + roomBooking + ";" + roomNights + ";" + roomBooker + "/n"); 
     } 
     finally { 
      out.close(); 
     } 
    } 
} 

からこれは、外部APIを使用せずに解決する必要があります。

abstract class Room 
{ 
    public Room(int newRoomNo, boolean newRoomEnSuite, int newRoomNights, String newRoomBooker) 
    { 
     // .. 
    } 

    /* Each implementation of Room must be able to convert itself 
     into a line of text */ 
    @Override 
    public abstract String toString(); 
} 

class RoomWriter 
{ 
    public void write(List<Room> rooms, File file) throws IOException 
    { 
     BufferedWriter writer = new BufferedWriter(new FileWriter(file)); 
     try 
     { 
      for (Room room : rooms) 
      { 
       writer.write(room.toString()); 
       writer.write("\n"); 
      } 
     } 
     finally 
     { 
      writer.close(); 
     } 
    } 

} 
0

はの線に沿って何かを試してみてください。ストリームのファイルを使用すると、オブジェクトの永続的な格納が可能になります。 I

2

あなたはすべてのArrayListに

を保存するためにObjectOutputStreamを使用することができますし、ObjectInputStreamのを使用して(再構成)読むことができます:

+0

+1正解 – Stephan

+0

はい、しかし' Room'クラスに 'Serializable'インターフェースを実装させるべきです。 – viktor

関連する問題