将数组写入csv java,app在多个处理器上运行

时间:2014-04-02 12:39:11

标签: java arrays csv printwriter

我有五个不同粒子的五个(x,y)阵列。数组的格式为:

double [][] ProtonTracking = new double[1000][2];

(x,y)坐标垂直存储在列中:

ProtonTracking = (x1,y1)
                 (x2,y2)
                 (x3,y3)
                   etc

我正在尝试将这些(x,y)坐标写入.csv文件以绘制它们。我曾尝试使用PrintWriter来执行此操作,但我不确定如何使用它。作为一个额外的复杂功能,这个代码已经被创建为在多个处理器上运行,所以我很困惑在哪里创建文件以及在哪里关闭它。每个处理器生成并模拟单个粒子,然后理想地将此数据写入.csv。多个线程是否可以同时写入.csv文件?有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您可以使用名为OpenCsv的库,该库可免费使用。

这将帮助您轻松阅读和编写.csv文件。

请参阅此链接http://viralpatel.net/blogs/java-read-write-csv-file/

非常容易。希望你能得到这个。

答案 1 :(得分:0)

您的帖子中有几个问题,请让我们按顺序处理它们。

第一个问题: 如何使用PrintWriter将已定义的数组写入文件?

 void generateCSV(File myFile) throws IOException {
     PrintWriter pw = new PrintWriter(new FileWriter(myFile));
     for(int i= 0; i < 1000; i++) {
       pw.print(String.format("(%f, %f)%n", ProtonTracking[i][0], ProtonTracking[i][1]));
     }
  }

这将输出您在上面显示的数据,每对一行,用括号括起来。

第二个问题: 创建文件的位置?

那个取决于平台。在桌面上,您应该能够在应用程序的运行目录中创建文件,或者在用户的主目录中创建固定路径。查看 java.lang.System.getProperties 文档,它将告诉您如何获取主目录的位置或临时目录,然后您可以使用它来构建文件对象。在其他平台上,例如Android设备,您必须研究可用的可写目录。

另外两个选择是让用户提供输出文件的名称作为参数,或者让代码生成输出到 System.out 并让用户捕获它。

第三个问题: 是否可以让多个线程写入同一个文件?

可能?是。你想这样做吗?可能不是。多线程命中相同输出文件时遇到的问题是你不知道哪个线程写了哪些数据,所以它会混合在一起。这可能会导致情节数据混乱。可写文件应被视为给定线程的拥有的资源。

让多个线程写入不同的文件是完全没问题的。如果每个线程都维护对其自己的 ProtonTracking 数组的引用并且有自己的输出文件,那么它应该可以正常工作。您将要确保在您的设计中所有对象和数据结构都是线程安全的,或者对它们的访问得到适当保护。这可能意味着您不想共享一个 ProtonTracking 数组,而是希望每个线程都有一个。

希望这有助于您朝着正确的方向前进。