使用Java读写CSV文件 [英] Read and Write CSV File using Java

查看:68
本文介绍了使用Java读写CSV文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个CSV日志文件,它包含许多这样的行:

I have a CSV log file and it contains many rows like this:

2016-06-21 12:00:00,000 : helloworld: header1=2;header2=6;header=0

我想将它们写入新的CSV文件.

I want to write them to a new CSV file.

public void readLogFile() throws Exception
{
    String currentLine = "";
    String nextLine = "";

    BufferedReader reader = new BufferedReader(new FileReader(file(false)));
    while ((currentLine = reader.readLine()) != null)
    {
        if (currentLine.contains("2016") == true)
        {
            nextLine = reader.readLine();
            if (nextLine.contains("helloworld") == true)
            {                   
                currentLine = currentLine.substring(0, 23);
                nextLine = nextLine.substring(22, nextLine.length());

                String nextBlock = replaceAll(nextLine);
                System.out.println(currentLine + " : helloworld: " + nextBlock);

                String[] data = nextBlock.split(";");
                for (int i = 0, max = data.length; i < max; i++)
                {
                    String[] d = data[i].split("=");
                    map.put(d[0], d[1]);
                }
            }
        }
    }
    reader.close();
}

这是我编写内容的方法:

This is my method to write the content:

public void writeContentToCsv() throws Exception
{
    FileWriter writer = new FileWriter(".../file_new.csv");
    for (Map.Entry<String, String> entry : map.entrySet())
    {
        writer.append(entry.getKey()).append(";").append(entry.getValue()).append(System.getProperty("line.separator"));
    }
    writer.close();
}

这是我想要的输出:

header1; header2; header3
2;6;0
1;5;1
5;8;8
...

当前,CSV文件如下所示(仅显示一个数据集):

Currently, the CSV file looks like this (only showing one dataset):

header1;4
header2;0
header3;0

有人可以帮助我修复代码吗?

Can anyone help me fix the code?

推荐答案

创建一个用于存储标头值的类,并将其存储在列表中.遍历列表以保存结果.

Create a class to store the header values, and store it in the list. Iterate over the list to save the results.

当前使用的地图只能存储2个值(正在存储标头值(命名为其对应的值)

The currently used map can only store 2 values (which it is storing the header value (name its corresponding value)

map.put(d [0],d [1]);此处d [0]将为header1,而d [1]将为4(但我们只希望从此处开始4)

map.put(d[0], d[1]); here d[0] will be header1 and d[1] will be 4 (but we want only 4 from here)

    class Headervalues {
    String[] header = new String[3];
}

public void readLogFile() throws Exception
{
    List<HeaderValues> list = new ArrayList<>();
    String currentLine = "";
    BufferedReader reader = new BufferedReader(new FileReader(file(false)));
    while ((currentLine = reader.readLine()) != null)
    {
        if (currentLine.contains("2016") && currentLine.contains("helloworld"))
        {

                String nextBlock = replaceAll(currentLine.substring(22, currentLine.length());

                String[] data = nextBlock.split(";");
                HeaderValues headerValues = new HeaderValues();
                //Assuming data.length will always be 3.
                for (int i = 0, max = data.length; i < max; i++)
                {
                    String[] d = data[i].split("=");
                    //Assuming split will always have size 2
                   headerValues.header[i] = d[1];
                }
                list.add(headerValues)
            }
        }
    }
    reader.close();
}
public void writeContentToCsv() throws Exception
{
    FileWriter writer = new FileWriter(".../file_new.csv");
    for (HeaderValues value : headerValues)
    {
        writer.append(value.header[0]).append(";").append(value.header[1]).append(";").append(value.header[2]);
    }
    writer.close();
}

这篇关于使用Java读写CSV文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆