如何读取 Java 文本文件中一行的特定部分?
How To Read A Specific Part Of A Line In A Text File In Java?
我有一个文本文件,我在其中一行一行地写了一些信息,如下所示:
name|Number|amount|PIN
如何以某种方式回读数据(例如)我将能够仅使用方法中的 "name" 部分?
示例代码如下图所示。
您可以逐行阅读文本,然后使用“|”分隔列的分隔符。
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.forEach(System.out::println);
}
一开始声明一个List来收账:
import java.util.ArrayList;
...
public Account[] inReader() { //BTW: why do you pass an Account[] here?
ArrayList accountList = new ArrayList();
...
}
用
替换for(String records : dataRecords) {...}
String name = dataRecords[0];
String cardNumber = dataRecords[1];
int pin = Integer.parseInt(dataRecords[2]); //to convert the String back to int
double balance = Double.parseDouble(dataRecords[3]);
Account account = new Account(name, cardNumber, pin, balance);
accountList.add(account);
因为您已经逐个记录进行处理 (while ((line = br.readLine())!=null) {...}
)
最后return accountList.toArray(new Account[0]);
您可以逐行阅读文件并在分隔符“|”处拆分。
以下示例假定文件路径位于 args[0] 中,并且将读取然后输出输入的名称部分:
public static void main(String[] args) {
File file = new File(args[0]);
BufferedReader br = new BufferedReader(new FileReader(file));
while(String line = br.readLine()) != null) {
String[] details = line.split("|");
System.out.println(details[0]);
}
}
如上面的评论所述,您可以简单地 split
分隔符 |
上的行,然后从那里开始。
类似于:
public class Account {
// ...
public static Account parseLine(String line) {
String[] split = line.split("|");
return new Account(split[0], split[1], split[2], split[3]);
}
}
应该可以正常工作(假设您有一个构造函数可以接受您要放入的四样东西)。如果您的 Account
class 比这 更多 信息,您可以创建一个 AccountView
或类似命名的 class ,其中 does 仅包含您在此处提供的详细信息。有了这个,只需逐行迭代,将你的行解析为这些 Object
s 之一,并在调用其他需要 name
的方法时使用它的属性(包括已经可用的 getter)等
首先,您需要逐行阅读文件的全部内容。
然后,您需要为每一行创建一个函数,以通过可配置的分隔符拆分行文本。此函数可以接收列号,它应该 return 需要的值。例如:extractData(line, 0) should return 'name', extractData(line, 2) should return 'amount' etc.
此外,您还需要一些验证:如果只有 3 列而您期望有 4 列怎么办?您可以抛出异常,也可以 return null/empty.
有很多种方法可以做到这一点。其中之一是创建一个对象来保存数据。例如,由于您知道您的数据将始终包含名称、编号、金额和密码,因此您可以像这样制作 class:
public class MyData {
private String name;
private String number;
private double amount;
private String pin;
// Add getters and setters below
}
然后在阅读文本文件时,您可以列出 MyData
并添加每个数据。你可以这样做:
try {
BufferedReader reader = new BufferedReader(new FileReader("path\file.txt"));
String line = reader.readLine();
ArrayList<MyData> myDataList = new ArrayList<MyData>();
while (line != null) {
String[] dataParts = line.split("|"); // since your delimiter is "|"
MyData myData = new MyData();
myData.setName(dataParts[0]);
myData.setNumber(dataParts[1]);
myData.setAmount(Double.parseDouble(dataParts[2]));
myData.setPin(dataParts[3]);
myDataList.add(myData);
// read next line
line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
那么你可以这样使用数据:
myDataList.get(0).getName(); // if you want to get the name of line 1
myDataList.get(1).getPin(); // if you want to get the pin of line 2
您可以将文件转换为 csv 文件并使用特定于读取 csv 文件的库,例如打开CSV。这将使您更灵活地处理文件中的数据。
我有一个文本文件,我在其中一行一行地写了一些信息,如下所示:
name|Number|amount|PIN
如何以某种方式回读数据(例如)我将能够仅使用方法中的 "name" 部分? 示例代码如下图所示。
您可以逐行阅读文本,然后使用“|”分隔列的分隔符。
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.forEach(System.out::println);
}
一开始声明一个List来收账:
import java.util.ArrayList;
...
public Account[] inReader() { //BTW: why do you pass an Account[] here?
ArrayList accountList = new ArrayList();
...
}
用
替换for(String records : dataRecords) {...}
String name = dataRecords[0];
String cardNumber = dataRecords[1];
int pin = Integer.parseInt(dataRecords[2]); //to convert the String back to int
double balance = Double.parseDouble(dataRecords[3]);
Account account = new Account(name, cardNumber, pin, balance);
accountList.add(account);
因为您已经逐个记录进行处理 (while ((line = br.readLine())!=null) {...}
)
最后return accountList.toArray(new Account[0]);
您可以逐行阅读文件并在分隔符“|”处拆分。
以下示例假定文件路径位于 args[0] 中,并且将读取然后输出输入的名称部分:
public static void main(String[] args) {
File file = new File(args[0]);
BufferedReader br = new BufferedReader(new FileReader(file));
while(String line = br.readLine()) != null) {
String[] details = line.split("|");
System.out.println(details[0]);
}
}
如上面的评论所述,您可以简单地 split
分隔符 |
上的行,然后从那里开始。
类似于:
public class Account {
// ...
public static Account parseLine(String line) {
String[] split = line.split("|");
return new Account(split[0], split[1], split[2], split[3]);
}
}
应该可以正常工作(假设您有一个构造函数可以接受您要放入的四样东西)。如果您的 Account
class 比这 更多 信息,您可以创建一个 AccountView
或类似命名的 class ,其中 does 仅包含您在此处提供的详细信息。有了这个,只需逐行迭代,将你的行解析为这些 Object
s 之一,并在调用其他需要 name
的方法时使用它的属性(包括已经可用的 getter)等
首先,您需要逐行阅读文件的全部内容。 然后,您需要为每一行创建一个函数,以通过可配置的分隔符拆分行文本。此函数可以接收列号,它应该 return 需要的值。例如:extractData(line, 0) should return 'name', extractData(line, 2) should return 'amount' etc.
此外,您还需要一些验证:如果只有 3 列而您期望有 4 列怎么办?您可以抛出异常,也可以 return null/empty.
有很多种方法可以做到这一点。其中之一是创建一个对象来保存数据。例如,由于您知道您的数据将始终包含名称、编号、金额和密码,因此您可以像这样制作 class:
public class MyData {
private String name;
private String number;
private double amount;
private String pin;
// Add getters and setters below
}
然后在阅读文本文件时,您可以列出 MyData
并添加每个数据。你可以这样做:
try {
BufferedReader reader = new BufferedReader(new FileReader("path\file.txt"));
String line = reader.readLine();
ArrayList<MyData> myDataList = new ArrayList<MyData>();
while (line != null) {
String[] dataParts = line.split("|"); // since your delimiter is "|"
MyData myData = new MyData();
myData.setName(dataParts[0]);
myData.setNumber(dataParts[1]);
myData.setAmount(Double.parseDouble(dataParts[2]));
myData.setPin(dataParts[3]);
myDataList.add(myData);
// read next line
line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
那么你可以这样使用数据:
myDataList.get(0).getName(); // if you want to get the name of line 1
myDataList.get(1).getPin(); // if you want to get the pin of line 2
您可以将文件转换为 csv 文件并使用特定于读取 csv 文件的库,例如打开CSV。这将使您更灵活地处理文件中的数据。