为什么我的bufferedReader从文本文件中读取`java.lang.String; @ 70177ecd`?

时间:2014-12-14 09:51:36

标签: java string bufferedreader

我有bufferedReader用于从文本文件中读取文本行,但bufferedReader正在阅读的唯一文本行是[Ljava.lang.String;@70177ecd我的代码是下面:

private static final String dirToWriteFile = System.getProperty("user.dir") + "/VirtualATM.txt";    //File path for main user detail store.
FileInputStream fin = new FileInputStream(dirToWriteFile);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fin));
String lineFromFile = null;
lineFromFile = bufferedReader.readLine();
String [] lineFromFileToCheck = lineFromFile.split("\\s+");
do{
    for(i = 0; i < lineFromFileToCheck.length; i++){
        System.out.println(lineFromFileToCheck);
        /************* Error because "[Ljava.lang.String;@70177ecd" is being read from file ******************/
        if(lineFromFileToCheck[i].matches(cardNumberStr)){
            accountNoFound = true;
        }
        if(accountNoFound == false & i > 10){
            break;
        }
    }
    if(accountNoFound == true){
        for(j = 0; j < lineFromFileToCheck.length; j++){
            if(lineFromFileToCheck[j].matches(pinToCheck)){
                pinNoFound = true;  //if pin matches exactly what is inputted by user
                break;
            }
        }
        lineFromFile = bufferedReader.readLine();
        if (lineFromFile != null) {
            lineFromFileToCheck = lineFromFile.split("\\s+");
        }
    }
    if(pinNoFound == false & lineFromFile == null){
        JOptionPane.showMessageDialog(null, "Error! Invalid input length/type. Try again...", "Error", JOptionPane.ERROR_MESSAGE);
    }
    if(pinNoFound == true & accountNoFound == true & lineFromFile == null){
        break;
    }
}while(accountNoFound == false | pinNoFound == false | lineFromFile != null);
fin.close();
bufferedReader.close();

如果有人能够提出读者的错误,[Ljava.lang.String;@70177ecd究竟是什么意思以及导致BufferedReader返回的原因是什么呢?

3 个答案:

答案 0 :(得分:2)

lineFromFileToCheck是一个String数组。你需要调用lineFromFileToCheck[i]来打印一个字符串

更改此

for(i = 0; i < lineFromFileToCheck.length; i++){
        System.out.println(lineFromFileToCheck);

到这个

for(i = 0; i < lineFromFileToCheck.length; i++){
        System.out.println(lineFromFileToCheck[i]);

答案 1 :(得分:1)

这不是错误,也不是缓冲读者读错了。您正在尝试打印没有实现toString的数组。如果您需要明确相同的用途:

System.out.println(Arrays.toString(lineFromFileToCheck));//your splitted line that you read from file

或者只是打印行而不是如下所示的数组:

System.out.println(lineFromFile);

答案 2 :(得分:1)

这很可能意味着它正在接收数组并使用deepToString方法。

来自JavaDoc:

Returns a string representation of the "deep contents" of the specified array.

所以你要做的就是从你的for循环中的特定元素中读取。只是做 -

System.out.println(lineFromFileToCheck);