如何读取文本文件并将内容存储在单独的arrayLists中

时间:2015-03-23 15:42:14

标签: java arraylist text-files

我的课程如下:房间,抽屉,短裤,上衣和袜子。我在其指定的类中有arrayLists roomList,drawerList,shortList,topList和sockList。我还有一个文本文件(room.txt),我需要在其中读取内容并将它们存储在相应的arrayList中。 文本文件如下所示:

Room 1,White,BlackStripes,3
抽屉1,黑色,大,3,2,4
抽屉2,白色,小,4,1,2
短1,蓝色,M,32
短2,黄色,L,34
短3,橙色,S,28
前1名,绿色,L,10 袜子1,白色,L,20
袜子2,红色,L,18

基本上我无法将内容放在正确的位置。这就是我的代码:

try{
Scanner read = new Scanner(new File("room.txt"));
while(read.hasNextLine())
{ 
  Room myRoom = new Room();
  Drawers myDrawers = new Drawer();
  Shorts myShorts = new Short();
  Tops myTops = new Tops();
  Socks mySock = new Socks();

  // What goes here, including comma delimeters, and counters etc


  myRoom.setName(//What goes here);
  myRoom.setColor();
  myRoom.setStripes();
  myRoom.SetDrawerAmount();
  Room.roomList.add(myRoom);

  myDrawers.setName();
  myDrawers.setColor();
  myDrawers.setSize();
  myDrawers.setContainers();
  myDrawers.setKnobs();
  myDrawers.setItem();
  Drawers.drawerList.add(myDrawers);

  myShorts.setname();
  myShorts.setColor();
  myShorts.setSize();
  myShorts.setNumSize();
  Shorts.shortList.add(myShorts);

  myTops.setName();
  myTops.setColor();
  myTops.setSize();
  myTops.setNumSize();
  Tops.topList.add(myTops);

  mySocks.setName();
  mySocks.setColor();
  mySocks.setSize();
  mySocks.setPairs();
  Socks.sockList.add(mySocks);
    }
}

catch (Exception e)
{
System.out.println("Error File Not Found");
}

基本上,我不知道如何格式化它以了解我应该何时添加到roomList,drawerList,shortsList,topsList或socksList,因为有不同数量的行和不同数量的内容每行。

3 个答案:

答案 0 :(得分:2)

您必须为这种文件编写自定义解析器。 您的解析器必须读取每一行,然后用逗号“,”拆分该行(参见String.split()方法)。这为每行提供了一个String []。 获得String []后,将第一个元素与“Rooms”,“Drawers”等进行比较......在开关语句中或 if / else

您必须处理String []的每个元素才能对对象进行分类。以单独的方法执行此操作。您的方法应该将房间,抽屉,短裤等返回给调用者,依此类推......

答案 1 :(得分:0)

你没有告诉我们什么课堂,抽屉......看起来像你的问题所以:)

为什么不使用普通旧列表?

List<Room> rlist= new ArrayList<Room>();
List<Drawer> dlist= new ArrayList<Drawer>();

等等,那就很容易了:

rlist.add(myRoom);

然后再来一次

答案 2 :(得分:0)

@eyp有很好的建议。另外,

  • 扫描仪有时令人沮丧。如果它适合你,那就去吧。否则,请阅读其他Java I / O类,如FileReader和BufferedReader。您可以编写BufferedReader和FileReader(请参阅BufferedReader文档中的示例:Java Standard Edition Documentation。)它几乎与使用Scanner一样简单,它为您提供了所需的readLine()方法,并且它允许您执行更多操作未来的高级I / O.

  • 如果不同的类是公共超类的子类,则可以将大量解析放入超类构造函数中,以避免为每个子类重复它。看看你的文本文件中的每一行是由什么组成的,我认为你将能够识别一个共同的超类。然后每个子类都可以处理特定于它的部分。