我有一个文本文件,其中我逐行写了一些信息:
name|Number|amount|PIN
如何以某种方式(例如)以一种方法仅使用“名称”部分的方式来回读数据? 示例代码如下图所示。
答案 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。这将为您提供更大的灵活性来处理文件中的数据。