【问题标题】:Saving an Array to a Text file in Java将数组保存到 Java 中的文本文件
【发布时间】:2009-09-03 18:45:31
【问题描述】:

我正在尝试将int 数组的值打印到本地文件。但是,我似乎找不到以标准形式 (1,2,3) 而不是堆地址打印整数的方法:([I@1befab0)

我的代码片段如下:

        PrintWriter pr = new PrintWriter("file");

        for (int i=0; i<views.length ; i++){
            pr.println(Arrays.toString(views));
        }
        pr.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.out.println("No such file exists.");
    }
}

我做错了什么?

【问题讨论】:

    标签: java arrays io


    【解决方案1】:

    您每次都尝试打印整个数组。试试这个:

    (我做了最小的更改。不过,您捕获 Exception 的事实通常是个坏主意,您通常应该在 finally 块中关闭编写器。)

    try
    {
        PrintWriter pr = new PrintWriter("file");    
    
        for (int i=0; i<views.length ; i++)
        {
            pr.println(views[i]);
        }
        pr.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.out.println("No such file exists.");
    }
    

    【讨论】:

    • 在每次迭代中关闭 PrintWriter 似乎是个错误?
    【解决方案2】:

    这个数组可能是一个多维数组吗?如果是这样,请使用java.util.Arrays.deepToString

    PrintWriter pr = new PrintWriter("file");
    
    for (int i=0; i<views.length ; i++){
      pr.println(Arrays.deepToString(views));
    }
    pr.close();
    

    【讨论】:

      【解决方案3】:

      您是否正在写入文件以保存数组内容?如果是这样,serialize the object (array in this case)。有一个关于如何反序列化对象的链接,以便您可以检索链接页面上的值。

      【讨论】:

        【解决方案4】:

        当你打印出数组时,它会调用数组的 toString() 函数。因此,您看到的是“views”数组的参考值,因为数组中存在许多值。

        正如 Jon 所指出的,您实际上需要打印数组的值。当然,这假设数组包含通过 toString 很好地格式化的对象(或者数组包含原语)。

        【讨论】:

          【解决方案5】:

          数组的 toString() 方法给出“[I@1befab0”字符串。
          所以你需要遍历数组。

          你可以把问题一分为二:

          1. 用于构建字符串(您可以在调试中检查值)

            StringBuilder b = new StringBuilder();
            for (Object o : views) {
              b.append(String.valueOf(o));
            }
            
          2. 用于将字符串写入文件
            ...

          【讨论】:

            【解决方案6】:

            这里的大多数答案都集中在您需要遍历数组而不是一次性打印所有数组的事实上。但是 Arrays.toString(...) 应该返回与 Arrays.asList(...).toString() 相同的结果,顺便提一下,应该是 [1,2,3] 形式。

            因此,正如马特在他的回答中所做的那样,我建议 views 实际上是一个双嵌套数组。

            在这种情况下,固定代码是:

            try {
                PrintWriter pr = new PrintWriter("file");
            
                    for (int i=0; i<views.length ; i++){
                       pr.println(Arrays.toString(views[i]));
                    }
                    pr.close();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                    System.out.println("No such file exists.");
                }
            }
            

            【讨论】:

              【解决方案7】:
              PrintWriter pr = new PrintWriter("file");        
              for (int i=0; i<views.length ; i++){            
              pr.println("" + views[i]);        
              }        
              pr.close();
              

              没有比这更容易的了。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多