使用缓冲读取器和拆分方法进行文件读取时出现问题

时间:2018-09-13 15:33:05

标签: java csv

package bankaccountapp;
import java.io.*;
import java.util.*;
public class Csv {
public static void main(String args[]){
    List<String[]> accounts=new LinkedList<String[]>();
    String data;
    try {
        BufferedReader br = new BufferedReader(
            new FileReader(
            "C:\\Users\\RaviKiran Reddy\\Desktop\\JBNR\\NewBankAccounts.csv"));
        while ((data=br.readLine())!= null) {
            String[] datarows=data.split(",");
            accounts.add(datarows);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch (IOException e1) {
        e1.printStackTrace();
    }

    System.out.println(accounts);
}

当我尝试通过使用逗号将其拆分来读取CSV文件时,我得到的是目标代码(例如[Ljava.lang.String;@7382f612)作为输出,但是没有得到我期望的字符串。

如果这是一行:Deadra Power,009545701,Checking,4500

然后我期望输出为:\n Deadra Power \n 009545701 \n Checking \n 4500

我能知道错误在哪里吗?

3 个答案:

答案 0 :(得分:1)

您要将整个字符串数组插入到帐户中,所以我想[Ljava.lang.String;@7382f612是数组的toString()方法的结果。

对于第一行的第一字段尝试accounts.get(0)[0],对于第一行的第二字段尝试accounts.get(0)[1],等等。

如果要以\n Deadra Power \n 009545701 \n Checking \n 4500的形式获取数据,则不要拆分每个读取行,而应用\n替换逗号。

答案 1 :(得分:1)

正如Paco Abato指出的那样,您正在打印的对象是字符串数组。

如果要查看数组的每个元素(即csv文件中的一行),可以按以下方式打印它:

for (String[] accountRow : accounts) {
   System.out.println(Arrays.toString(accountRow));
}

答案 2 :(得分:1)

制作

 System.out.println(accounts);

将调用toString()方法,它将打印a string representation of the object。为此,您需要一个简单的函数来读取字符串数组并打印列表中的每个字符串。因此,您将可以访问列表的每个元素。希望对您有帮助。

for (String[] myLine : accounts)
{
    // To do the magic
}