【问题标题】:Writing arraylist to textfile将arraylist写入文本文件
【发布时间】:2011-12-19 19:01:38
【问题描述】:

我有一个 Room 类的数组列表,它保存在 Hostel 类中,我想将此数组列表写入文本文件。这样做最有效的方法是什么?

宿舍类

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

【问题讨论】:

标签: java arraylist writetofile


【解决方案1】:

来自commons-io的单线

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

【讨论】:

  • 我认为这只是使用列表元素的toString() 方法。
  • @Stephan 不是。有一种方法需要 File 和 Collection
  • 集合的元素是怎么写的?
  • 集合被迭代。见IOUtils.writeLines
【解决方案2】:
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 的解决方案。

【讨论】:

    【解决方案3】:

    可以使用ObjectOutPutStream来保存所有的ArrayList

    并且可以使用 ObjectInputStream 读取(重构)。对象的持久存储可以通过使用流的文件来实现。我

    【讨论】:

    • 是的,但是你应该让Room类实现Serializable接口。
    【解决方案4】:

    尝试以下方式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多