使用Java将数组保存到文本文件

时间:2009-09-03 18:45:31

标签: java arrays io

我正在尝试将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.");
    }
}

我可能做错了什么?

7 个答案:

答案 0 :(得分:5)

您每次尝试打印整个阵列。试试这个:

(我做了很少的改动。但是你抓住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.");
}

答案 1 :(得分: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();

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

您可以将问题分成两部分:

  1. 用于构建String(您可以在debug中检查值)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

这里的大多数答案都集中在这样一个事实上:您需要遍历数组而不是一次性打印所有数组。但是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.");
    }
}

答案 6 :(得分:0)

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

它没有那么容易。