Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从文件读取到arraylist_Java_Arrays_Arraylist_Filereader - Fatal编程技术网

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的代码无论文件有多长都可以工作,因为他在循环中进行读取,和以前一样。这没有什么错,除了在一行可以做的地方使用两行之外。