Java 如何读取文本文件并将内容存储在单独的ArrayList中
我的课程如下:房间、抽屉、短裤、上衣和袜子。我在指定的类中有ArrayList roomList、drawerList、shortList、topList和sockList。我还有一个文本文件(room.txt),我需要在其中读取内容并将其存储在适当的arrayList中。 文本文件如下所示: 1号房间,白色,黑色条纹,3号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
抽屉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
- 若不同的类是一个公共超类的子类,那个么可以在超类构造函数中进行大量解析,以避免对每个子类重复解析。看看文本文件中的每一行是由什么组成的,我认为您将能够识别一个常见的超类。然后每个子类都可以处理特定于它的部分
rlist.add(myRoom);