将2-D对象数组(Object [] []数组)导出为Java中的.csv文件

时间:2015-11-30 22:54:43

标签: java

我正在研究一个java项目并将Eclipse与JDK 1.7一起使用。我有一个对象类型的二维数组Object[][] array。我希望将数组的内容(导出)存储到磁盘上的csv文件(每行的单独列中的每个值)。这是我尝试的代码:

FileOutputStream fos = new FileOutputStream("newFile.csv");
            ObjectOutputStream oos = new ObjectOutputStream(fos);  
            for(int i=0;i<array.length;i++)
            {
                for(int j=0;j<array[0].length;j++)
                {
                   oos.writeObject(array); 
                   oos.writeObject(",");
                   }
            }
            oos.close();

存储在文件newFile.csv中的输出如下:

¬íur[[Ljava.lang.Object;¿ûSäkÛÊxpur[Ljava.lang.Object;ÎXŸs)lxpt1t1tClosedt100.00000000t   
0.00000000uq~t2t1tClosedt200.00000000t100.00000000uq~t3t1tClosedt100.00000000t50.00000000t   q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~q~

这是一些垃圾值。我需要帮助来弄清楚这个程序有什么问题(如何在存储之前将对象转换为字符串,这就是我猜测错误的原因),以及如何解决问题。

我在http://www.tutorialspoint.com/java/io/objectinputstream_readobject.htm找到了帮助,但它处理的是byte[]String,而不是2-D对象数组。同样,http://www.mkyong.com/java/how-to-write-to-file-in-java-fileoutputstream-example/仅处理byte[]。我还在Java - How to write ArrayList Objects into txt file?找到了一个解决方案,其中使用ArrayList<String> MenuArray = new ArrayList<String>();而不是二维对象数组,并且解决方案也不完整。我也在Using FileUtils in eclipse寻求帮助 我收到了类似的错误。 解决方案说使用:

FileUtils.writeLines(new File("input.txt"), array);

但是,我收到method writeLine(File, Collection<>) is not applicable for WriteLine(File, Object[][])的错误。 此外,ADO.NET中的解决方案用于读取csv文件并将数据存储在Reading a csv file and storing the data in a 2-D object array的二维数组中,但我需要另一种方法,并且还需要解决方案而不是Java。

我使用的两种方法都不起作用。请注意,我的二维数组属于Object类型而不是String。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

        FileOutputStream fos = new FileOutputStream("newFile.csv");
        ObjectOutputStream oos = new ObjectOutputStream(fos);  
        for(int i=0;i<array.length;i++)
        {
            for(int j=0;j<array[i].length;j++)
            {
               oos.writeObject(array[i][j]); 
               if ( j < array[i].length -1 )
               {
                   oos.writeObject(",");
               } 
               else 
               {
                   oos.wrinteObject("\n");
               }
             }
        }
        oos.close();