2011-12-19 76 views
0

我有Room类,这是在Hostel类举行的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 – 2011-12-19 19:04:25

+0

创建一个方法,将一个房间写入作为参数传递的文件。然后打开一个文件,使用'for'循环遍历数组列表并写入每个'Room'实例,然后关闭文件。如有疑问,请使用谷歌。 – 9000 2011-12-19 19:05:22

回答

5

一个班轮从commons-io

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

我认为这是仅使用所述列表元素的'的toString()'方法。 – Stephan 2011-12-19 19:49:19

+0

@Stephan它不是。有这需要的文件和收藏 – Bozho 2011-12-19 20:27:43

+0

以及如何集合的元素写的方法? – Stephan 2011-12-19 20:42:06

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的溶液。

0

尝试沿着线的东西:

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(); 
     } 
    } 

} 
2

可以,使用ObjectOutputStream保存所有的ArrayList

,可以使用的ObjectInputStream读取(重构)。对象的持久存储可以通过使用流的文件来完成。 I

+0

+1正确答案 – Stephan 2011-12-19 19:50:15

+0

是的,但你应该做'Room'类实现'Serializable'接口。 – viktor 2011-12-19 20:18:33