从文件中读取 - Java
Reading from a file - Java
我正在做一个项目,我需要从文件中读取文本,然后将特定部分存储为变量。
说我有文本文件 example.txt
John
Smith
32
1991
我想将第一行指定为:
String firstName; -> John
等等。
目前我有这个。
public void load(String fileName){
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileName));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
此代码将打印文件的内容,这是朝着正确方向迈出的一步,但是如何逐行读取?
因为我真的不想养成将整个文件存储在内存中的习惯。
我知道你可以用
转换文本
parseInt()
和类似的方法,但我只是想着手提取值。
你可以做类似...
while ((sCurrentLine = br.readLine()) != null) {
String firstName = sCurrentLine;
String lastName = br.readLine();
String age = br.readLine();
String dob = br.readLine();
}
但这对文件要求做了相当大的假设,它假设每个条目有 4 行。
您可以将每个条目放在它自己的行上,并使用分隔符将它们分开,例如
John;Smith;32;1991
然后使用类似...
while ((sCurrentLine = br.readLine()) != null) {
String parts[] = currentLine.split(";");
String firstName = parts[0];
String lastName = parts[1];
String age = parts[2];
String dob = parts[3];
}
阅读每个条目。这使您可以更好地控制条目的处理,因为您可以检查 parts
数组的长度以验证它是否具有预期值的数量。
一旦你有了一个条目,你会想要一个更好的方法来管理每个条目,我会创建一个简单的 POJO 来保存这些值,可能类似于...
public class Person {
private final String fisrtName;
private final String lastName;
private final int age;
private final int dob;
public Person(String fisrtName, String lastName, int age, int dob) {
this.fisrtName = fisrtName;
this.lastName = lastName;
this.age = age;
this.dob = dob;
}
public String getFisrtName() {
return fisrtName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public int getDob() {
return dob;
}
}
那你也许可以用List
或Map
来存储它们,这样会更容易管理...
List<Person> people = new ArrayList<>(25);
//...
while ((sCurrentLine = br.readLine()) != null) {
String parts[] = currentLine.split(";");
String firstName = parts[0];
String lastName = parts[1];
String age = parts[2];
String dob = parts[3];
people.add(new Person(firstName, lastName, Integer.parseInt(age), Integer.parseInt(dob));
}
另一种解决方案可能是使用 Scanner
,这样您就可以使用 next
和 nextInt
来解析每个条目
所以,如果我们将其重新构造为以下格式...
John Smith 32 1991
您可以简单地使用
while ((sCurrentLine = br.readLine()) != null) {
Scanner scanner = new Scanner(sCurrentLine);
String firstName = scanner.next();
String lastName = scanner.next();
int age = scanner.nextInt();
int dob = scanner.nextInt();
people.add(new Person(firstName, lastName, age, dob);
}
改为
你也可以试试这个。
File file = new File("your file location");
Scanner scan = new Scanner(file);
while(scan.hasNextLine()){
//Assign to your pojo
System.out.println(scan.next());
}
我正在做一个项目,我需要从文件中读取文本,然后将特定部分存储为变量。
说我有文本文件 example.txt
John
Smith
32
1991
我想将第一行指定为:
String firstName; -> John
等等。
目前我有这个。
public void load(String fileName){
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileName));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
此代码将打印文件的内容,这是朝着正确方向迈出的一步,但是如何逐行读取?
因为我真的不想养成将整个文件存储在内存中的习惯。
我知道你可以用
转换文本parseInt()
和类似的方法,但我只是想着手提取值。
你可以做类似...
while ((sCurrentLine = br.readLine()) != null) {
String firstName = sCurrentLine;
String lastName = br.readLine();
String age = br.readLine();
String dob = br.readLine();
}
但这对文件要求做了相当大的假设,它假设每个条目有 4 行。
您可以将每个条目放在它自己的行上,并使用分隔符将它们分开,例如
John;Smith;32;1991
然后使用类似...
while ((sCurrentLine = br.readLine()) != null) {
String parts[] = currentLine.split(";");
String firstName = parts[0];
String lastName = parts[1];
String age = parts[2];
String dob = parts[3];
}
阅读每个条目。这使您可以更好地控制条目的处理,因为您可以检查 parts
数组的长度以验证它是否具有预期值的数量。
一旦你有了一个条目,你会想要一个更好的方法来管理每个条目,我会创建一个简单的 POJO 来保存这些值,可能类似于...
public class Person {
private final String fisrtName;
private final String lastName;
private final int age;
private final int dob;
public Person(String fisrtName, String lastName, int age, int dob) {
this.fisrtName = fisrtName;
this.lastName = lastName;
this.age = age;
this.dob = dob;
}
public String getFisrtName() {
return fisrtName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public int getDob() {
return dob;
}
}
那你也许可以用List
或Map
来存储它们,这样会更容易管理...
List<Person> people = new ArrayList<>(25);
//...
while ((sCurrentLine = br.readLine()) != null) {
String parts[] = currentLine.split(";");
String firstName = parts[0];
String lastName = parts[1];
String age = parts[2];
String dob = parts[3];
people.add(new Person(firstName, lastName, Integer.parseInt(age), Integer.parseInt(dob));
}
另一种解决方案可能是使用 Scanner
,这样您就可以使用 next
和 nextInt
来解析每个条目
所以,如果我们将其重新构造为以下格式...
John Smith 32 1991
您可以简单地使用
while ((sCurrentLine = br.readLine()) != null) {
Scanner scanner = new Scanner(sCurrentLine);
String firstName = scanner.next();
String lastName = scanner.next();
int age = scanner.nextInt();
int dob = scanner.nextInt();
people.add(new Person(firstName, lastName, age, dob);
}
改为
你也可以试试这个。
File file = new File("your file location");
Scanner scan = new Scanner(file);
while(scan.hasNextLine()){
//Assign to your pojo
System.out.println(scan.next());
}