如何读取 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 仅包含您在此处提供的详细信息。有了这个,只需逐行迭代,将你的行解析为这些 Objects 之一,并在调用其他需要 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。这将使您更灵活地处理文件中的数据。