如何将txt文件读取到未知大小的ArrayList

时间:2013-11-08 19:48:26

标签: java arraylist

如何从包含未知大小的行的txt文件中读取?例如:

Family1,john,mark,ken,liam

Family2,jo,niamh,liam,adam,apple,joe

每一行都有不同数量的名称。我可以在使用像

这样的对象类型时读入
 family(parts[0], parts[1], parts[2]) 

但是,如果我知道将在每个中的amout。如何在不知道每个中有多少的情况下阅读它?

FileReader fr = new FileReader("fam.txt");
       BufferedReader br = new BufferedReader(fr);
       String fileLines;
       String[] parts;    
        while(br.ready())
        {
          fileLines = br.readLine();
          parts = fileLines.split(",");
          .
          .

5 个答案:

答案 0 :(得分:2)

您可以使用varargs为family()方法接受数组:family(String ... parts)或只使用family(String[] parts)

就个人而言,我会创建一个单独的类Family,并且不会因为文件格式的实现细节而污染它(即每行的第一项是姓氏):

public class Family {
    private final List<String> members = new ArrayList<>();
    private final String familyName;

    public Family(String familyName, Collection<String> members) {
        this.familyName = familyName;
        this.members.addAll(members);
    }
}

然后你的循环可以是这样的:

List<Family> families = new ArrayList<>();

String line;
while ((line = br.readLine()) != null) {
   List<String> parts = Arrays.asList(line.split(","));
   String familyName = parts.remove(0);
   families.add(new Family(familyName, parts));
}

答案 1 :(得分:0)

你正在努力将数据加载到String[],而ArrayList又是一个普通数组。您应该使用维护内部数组的FileReader fr = new FileReader("fam.txt"); BufferedReader br = new BufferedReader(fr); String fileLines; String[] parts; List<List<String>> data = new ArrayList<>(); while(br.ready()) { fileLines = br.readLine(); parts = fileLines.split(","); data.add(Arrays.asList(parts)); //do what you want/need... } //do what you want/need... 并动态增加其大小。

String[] parts

更好的方法是解析public void yourMethod() { FileReader fr = new FileReader("fam.txt"); BufferedReader br = new BufferedReader(fr); String fileLines; String[] parts; List<Family> familyList = new ArrayList<>(); while(br.ready()) { fileLines = br.readLine(); parts = fileLines.split(","); Family family = new Family(parts[0], parts[1], parts[2]); familyList.add(family); //do what you want/need... } //do what you want/need... } 中的数据并构建某个类的对象,该对象将包含特定情况的数据:

{{1}}

答案 2 :(得分:0)

ArrayList<E>List接口的可调整大小的数组实现。实现所有可选列表操作,并允许所有元素(包括null)提供操作内部用于存储列表的数组大小的方法。

每个ArrayList实例都有一个capacity:用于存储列表中元素的数组大小。 始终至少与列表大小一样大。当元素添加到ArrayList时,其容量会自动增长。除了添加元素具有不变的摊销时间成本之外,未指定增长策略的详细信息。

因此,只需阅读您的数据并使用ArrrayList.add(E e)方法添加到数组列表。

答案 3 :(得分:0)

我个人的偏好是使用Scanner类。您可以查看功能here。使用扫描程序,您可以一次解析一行文件并将这些值存储到字符串中。

Scanner scan = new Scanner(new File("fam.txt"));
List<String> families = new ArrayList<String>();
while(scan.hasNextLine()){
   families.add(scan.nextLine());
}

然后你可以用ArrayList

中的族做任何你想做的事

答案 4 :(得分:0)

使用扫描仪,这更容易。您可以将两者放在while循环中

Scanner sc = new Scanner(new File(myFile.txt));
while(sc.hasNextLine()) {
  while(sc.hasNextString()) {
    String str = sc.nextString();
  }
}

这是一个简单的版本,它无法正常工作,因为您必须在Java的变量中存储一些值才能正确读取它们。阅读Java Scanner上的文档以查找更详细的说明。扫描仪比你一直在做的容易得多