如何从包含未知大小的行的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(",");
.
.
答案 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上的文档以查找更详细的说明。扫描仪比你一直在做的容易得多