Java 如何从文件读取到arraylist
我在从文本文件读回并写回数组列表时遇到了一些问题。我想知道你能否告诉我哪里出了问题?谢谢Java 如何从文件读取到arraylist,java,arrays,arraylist,filereader,Java,Arrays,Arraylist,Filereader,我在从文本文件读回并写回数组列表时遇到了一些问题。我想知道你能否告诉我哪里出了问题?谢谢 accountArrayList = new ArrayList<BankAccount>(); private void fileIn() { try { createTestAccounts(); //Scanner input = new Scanner(new FileReader(bankFile)); JOptionP
accountArrayList = new ArrayList<BankAccount>();
private void fileIn()
{
try
{
createTestAccounts();
//Scanner input = new Scanner(new FileReader(bankFile));
JOptionPane.showMessageDialog(null, "File: " + bankFile + " has been opened for importing");
BufferedReader reader = new BufferedReader(new FileReader("bankFile.txt"));
String account = reader.readLine();
while(account !=null) {
accountArrayList.add(account); // - add a new account to the text file, but exception show that String cannot be converted to Bank Account
account = reader.readLine();
}
reader.close();
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "not found");
}
}
accountArrayList=newarraylist();
私有void fileIn()
{
尝试
{
createTestAccounts();
//扫描仪输入=新扫描仪(新文件读取器(银行文件));
showMessageDialog(null,“文件:“+bankFile+”已打开以进行导入”);
BufferedReader=新的BufferedReader(新文件读取器(“bankFile.txt”);
String account=reader.readLine();
while(帐户!=null){
accountArrayList.add(account);//-将新帐户添加到文本文件中,但异常显示该字符串无法转换为银行帐户
account=reader.readLine();
}
reader.close();
}
捕获(例外情况除外)
{
showMessageDialog(null,“未找到”);
}
}
您正在添加一个字符串,但是列表.add
方法需要类型为BankAccount
的对象
您必须找到一种方法将该字符串转换为该类型的对象,然后添加后者。也许有一个fromString()工厂方法?还是接受初始化字符串的构造函数
如果有一个构造函数,那么它应该是
accountArrayList.add(new BankAccount(account));
您正在添加一个字符串
,但是列表。add
方法需要类型为BankAccount
的对象
您必须找到一种方法将该字符串转换为该类型的对象,然后添加后者。也许有一个fromString()工厂方法?还是接受初始化字符串的构造函数
如果有一个构造函数,那么它应该是
accountArrayList.add(new BankAccount(account));
你将需要这样的东西…这取决于你的BankAccount类到底是什么
您将需要这样的内容…具体取决于您的BankAccount类。arraylist需要一个BankAccount
对象,而您是从文件中读取的,因此arraylist应该是字符串
ArrayList<String> accountArrayList = new ArrayList<>();
arraylist需要一个BankAccount
对象,而不是从文件中读取,因此arraylist应该是字符串
ArrayList<String> accountArrayList = new ArrayList<>();
要读取您可能使用的所有行(如果您的文件是UTF-8):
List allLines=Files.readAllLines(“bankFile.txt”,StandardCharsets.UTF_8);
但正如其他注释中所述,您需要将字符串
转换为银行账户
以读取您可能使用的所有行(如果您的文件为UTF-8):
List allLines=Files.readAllLines(“bankFile.txt”,StandardCharsets.UTF_8);
但正如其他评论中提到的,您需要将字符串
转换为银行帐户
,假设您有字符串
构造函数用于银行帐户
,如下所示:
public BankAccount(String account) {
this.account = account;
}
您可以使用ApacheCommonsIO和Java8来获得一行程序
List<BankAccount> accounts = FileUtils.readLines(new File(filename))
.stream().map(BankAccount::new).collect(Collectors.toList());
List accounts=FileUtils.readLines(新文件(文件名))
.stream().map(BankAccount::new).collect(Collectors.toList());
假设您为银行账户
有一个字符串
构造函数,如下所示:
public BankAccount(String account) {
this.account = account;
}
您可以使用ApacheCommonsIO和Java8来获得一行程序
List<BankAccount> accounts = FileUtils.readLines(new File(filename))
.stream().map(BankAccount::new).collect(Collectors.toList());
List accounts=FileUtils.readLines(新文件(文件名))
.stream().map(BankAccount::new).collect(Collectors.toList());
您面临什么问题?您的文件是否有多个帐户,每行一个?您只读取了文件的第一行,因此您将只获得第一个帐户,然后您就得到了一个无限循环。您到底遇到了什么问题?您正在添加一个字符串,但是列表。add
方法需要一个BankAccount
类型的对象。您必须找到一种方法将该字符串转换为该类型的对象,然后添加后者。可能有一个fromString()
factory方法?或者一个接受初始化字符串的构造函数?你永远都不应该发现(异常)你面临的问题?你的文件有多个帐户,每行一个?您只读取了文件的第一行,因此您将只获得第一个帐户,然后您就得到了一个无限循环。您到底遇到了什么问题?您正在添加一个字符串,但是列表。add
方法需要一个BankAccount
类型的对象。您必须找到一种方法将该字符串转换为该类型的对象,然后添加后者。可能有一个fromString()
factory方法?或者一个接受初始化字符串的构造函数?你永远不应该捕捉(异常),当你的循环构造也是正确的时候,OP将起作用。。。所以我反对它是“错误的”。这似乎是个坏主意。与其到处用字符串污染域数据,不如将字符串转换成他想要的类型。@Fildor是的,如果文件中只有一行,OP的代码就可以工作。你为什么这么认为@WonderWorld?OP的代码无论文件有多长都可以工作,因为他在循环中进行读取,和以前一样。这没有什么错,除了在一行可以做的地方使用两行之外。虽然你的循环构造也是正确的,但OP将起作用。。。所以我反对它是“错误的”。这似乎是个坏主意。与其到处用字符串污染域数据,不如将字符串转换成他想要的类型。@Fildor是的,如果文件中只有一行,OP的代码就可以工作。你为什么这么认为@WonderWorld?OP的代码无论文件有多长都可以工作,因为他在循环中进行读取,和以前一样。这没有什么错,除了在一行可以做的地方使用两行之外。