我希望能够获取文本文件的前3行,并将每行用作单独的参数。例如:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
try {
File file = new File("test.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
stringBuffer.append("\n");
}
fileReader.close();
System.out.println("Contents of file:");
System.out.println(stringBuffer.toString());
} catch (IOException e) {
e.printStackTrace();
}
这是我目前从文件中读取的方式,所以如果我有一个名为address的对象,它会查看文本文件的前三行并获取街道名称,城市,国家,我将如何读取每一行并将它们设置为新Address对象的参数?
Address test = new Address(String sname, String city, String country)
是我的示例构造函数。
答案 0 :(得分:1)
您可以将这3行保留在String
数组中,然后使用索引调用它们:
public static void main(String[] args) {
try {
File file = new File("test.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String[] lines = new String[3];
int i = 0;
while ((lines[i] = bufferedReader.readLine()) != null) {
if ( i == 2 ) {
break;
}
i++;
}
fileReader.close();
Address test = new Address(lines[0], lines[1], lines[2]);
// do something with test
} catch (IOException e) {
e.printStackTrace();
}
}
,其中
lines[0]
=街道名称lines[1]
= city lines[2]
=国家/地区根据您的评论,如果您想拥有多个地址:
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader(new File("test.txt")));
List<Address> addresses = new ArrayList<>();
List<String> lines = new ArrayList<>();
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
}
int noOfAddresses = lines.size() - lines.size() % 3;
for (int i = 0; i < noOfAddresses; i += 3) {
addresses.add(new Address(lines.get(i), lines.get(i + 1), lines.get(i + 2)));
}
// do something with addresses
// (Example - print them, if you defined toString in Address class)
for ( int i = 0 ; i < addresses.size() ; i++ ) {
System.out.println(addresses.get(i));
}
} catch (IOException e) {
e.printStackTrace();
}
}
步骤:
lines
)Address
个对象(addresses
)lines
列表。这条线可能很棘手:
int noOfAddresses = lines.size() - lines.size() % 3;
如果您想拥有正确的地址(没有null
街道,城市和国家/地区),它会忽略不需要的最后0,1或2行。
然后,前3行用于第一个地址,后3行用于第二个地址等。这就是我在那里使用i += 3
的原因。
答案 1 :(得分:-1)
我建议您使用JSON或其他等效技术来序列化/反序列化java对象。