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

Java 如何读取文本文件并将内容存储在单独的ArrayList中,java,arraylist,text-files,Java,Arraylist,Text Files,我的课程如下:房间、抽屉、短裤、上衣和袜子。我在指定的类中有ArrayList roomList、drawerList、shortList、topList和sockList。我还有一个文本文件(room.txt),我需要在其中读取内容并将其存储在适当的arrayList中。 文本文件如下所示: 1号房间,白色,黑色条纹,3号 抽屉1,黑色,大号,3,2,4 抽屉2,白色,小,4,1,2 短1,蓝色,M,32 短2,黄色,L,34 短3,橙色,S,28 顶部1,绿色,L,10 袜子1,白色,L,2

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

1号房间,白色,黑色条纹,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、DroperList、shortsList、topsList或socksList,因为每行的行数和内容数不同。

您必须为此类文件编写自定义解析器。 解析器必须读取每一行,然后用逗号“,”分隔该行(请参阅String.split()方法)。这将为每行提供一个字符串[]。 获得字符串[]后,将第一个元素与“房间”、“抽屉”等进行比较。。。在switch语句或if/else中


必须处理字符串[]的每个元素才能对对象进行分类。请使用单独的方法执行此操作。您的方法应该向调用者返回房间、抽屉、短裤等…

您没有告诉我们房间、抽屉。。。看起来这就是你的问题:)

为什么不使用简单的旧列表

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

然后一次又一次地

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

  • 扫描仪有时会令人沮丧。如果它对你有用,就去吧。否则,请阅读其他java I/O类,如FileReader和BufferedReader。您可以组合BufferedReader和FileReader(请参阅BufferedReader文档中的示例:),这几乎和使用Scanner一样简单,它为您提供了所需的readLine()方法,并允许您在将来执行更高级的I/O

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


这听起来像是你在要求我们填补你作业中的空白。你有没有试着解决这些问题?你搜索过“java文本解析”吗?我尝试过很多东西,但现在你提到java文本解析,我将对此进行研究。谢谢
rlist.add(myRoom);