Java写入csv文件

最近需要记录一下项目的日志,以便于日后的测试工作顺利进行,从现有的情况来看,使用csv文件做一下简单的记录即可。

问题是,不知道该怎么操作?想起之前自己倒腾代码的时候研究过怎么用java读写excel文件,当时采用的方法还隐约有印象,但并不确定是否适用于csv文件的读写。在一番面向互联网开发之后,发现使用IO流即可对csv文件进行读写,但过程并不顺利,其中居然出现了一些奇奇怪怪的问题,由此产生了总结记录下来的想法。

摘录部分代码,总结如下:

     File outFile = new File(path);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile, true),"gbk"));
        if (outFile.exists() && outFile.length() != 0) {
            return bw;
        }
        outFile.createNewFile();
        bw.write("xxx,xxx,xxx,xxx,xxx"); //表头
        bw.newLine();
        bw.flush();
        return bw;

最初我是按照网上的一些代码写的,但是发现只记录到了最新的数据,由此猜想新的数据将旧的数据覆盖掉了,new FileOutputStream(outFile, true),这行代码的第二个参数设置为true会在文件中追加数据,而不会将原本的数据覆盖掉。

然后发现,记录下来的数据出现乱码的情况,这个问题我知道是由编解码方式不一致导致的,一番搜索发现采用gbk方式即可解决乱码问题。

以上这段代码的大意就是,如果日志文件存在则返回一个BufferedWriter流,否则创建文件,写入表头,再返回流对象。

获取到流对象后,即可对文件写入数据,bw.newLine();的意思是换行,注意同一行中不同列的数据需要使用英文逗号分隔。

美中不足的地方在于没有查到如何使用io流在一个csv文件中创建多个页,所以如果有更灵活的需求推荐使用一些jar包而不是普通的io来实现。

原文地址:https://www.cnblogs.com/wxdmw/p/13784560.html