如何在Java的文本文件中读取行的特定部分?

时间:2019-04-01 08:17:42

标签: java arrays filereader

我有一个文本文件,其中我逐行写了一些信息:

name|Number|amount|PIN

如何以某种方式(例如)以一种方法仅使用“名称”部分的方式来回读数据? 示例代码如下图所示。

pic 1

pic 2

7 个答案:

答案 0 :(得分:1)

开头声明要收集帐户的列表:

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]);

答案 1 :(得分:0)

您可以逐行阅读文本,然后使用“ |”分隔符以分隔列。

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        stream.forEach(System.out::println);
}

答案 2 :(得分: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]);
    }
}

答案 3 :(得分: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类具有比这些信息更多的信息,则可以创建一个AccountView或类似名称的类,其中没有仅包含您可用的详细信息这里。这样,只需逐行进行迭代,将行解析为这些Object之一,并在调用其他需要name的方法时使用它的属性(包括已经可用的getter),等等。

答案 4 :(得分:0)

首先,您需要逐行阅读文件的全部内容。 然后,对于每行,您需要创建一个函数,以通过可配置的定界符分割行文本。该函数可以接收列号,并且应该返回所需的值。例如:extractData(line,0)应该返回'name',extractData(line,2)应该返回'amount'等。

此外,您还需要进行一些验证:如果只有3列并且期望4列怎么办?您可以抛出异常,也可以返回null / empty。

答案 5 :(得分:0)

有很多可能的方法可以做到这一点。其中之一是制作一个将保留数据的对象。示例,因为您知道您的数据将始终具有名称,数字,数量和密码,那么您可以创建这样的类:

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

答案 6 :(得分:0)

您可以将文件转换为csv文件,并使用特定于读取csv文件的库,例如OpenCSV。这将为您提供更大的灵活性来处理文件中的数据。