【问题标题】:Why is my bufferedReader reading `java.lang.String;@70177ecd` from a text file? [duplicate]为什么我的 bufferedReader 从文本文件中读取 `java.lang.String;@70177ecd`? [复制]
【发布时间】:2015-02-12 14:37:56
【问题描述】:

我有一个 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 返回的原因,那就太好了!

【问题讨论】:

  • lineFromFileToCheck 是一个数组。使用Arrays.deepToString(lineFromFileToCheck) 打印其内容。
  • 当你打印一个数组时,这就是它打印的内容。它可能更有用,但您需要使用 Arrays.toString(array) 来代替。

标签: java string bufferedreader


【解决方案1】:

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

来自 JavaDoc:

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

因此,您所要做的就是从 for 循环中的特定元素中读取。做吧——

System.out.println(lineFromFileToCheck);

【讨论】:

    【解决方案2】:

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

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

    或者只打印行而不是下面的数组:

    System.out.println(lineFromFile);
    

    【讨论】:

      【解决方案3】:

      lineFromFileToCheck 是一个字符串数组。你需要调用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]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-20
        • 2013-04-12
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 2017-08-12
        相关资源
        最近更新 更多