csv文件中的Java-CSV / Delete列

时间:2013-02-26 08:16:30

标签: java csv fileutils

我尝试用Java删除csv文件中的一列。

例如,我有这个csv文件

ID   name1   name2   name3
1    hello   hell    hel
2    try     tr      t
3    browser bro     br

我希望在下一个操作之后:(删除csvFile,2)它将是:

ID   name1   name3
1    hello   hel
2    try     t
3    browser br

我发现只有操作行而不是列。

2 个答案:

答案 0 :(得分:2)

删除CSV文件中列的唯一方法是删除整个文件中此列的标题和信息,即文件的每一行。即使您使用第三方库,它也会在内部执行此操作。

答案 1 :(得分:0)

读入每一行的每个列值,并仅写出所需的列,同时跳过不需要的列值。

使用 Apache Commons CSV 库的示例应用程序

这是一个示例应用程序,演示了如何使用Apache Commons CSV来读取输入文件,然后写入输出文件,跳过不需要的列值。

请注意使用try-with-resources语法自动关闭文件读取器和写入器对象。参见Tutorial by Oracle

RFC 4180是指定义Comma-Separated Values (CSV)格式的书面标准。

制作一个名为input.csv的文件。

ID,name1,name2,name3
1,hello,hell,hel
2,try,tr,t
3,browser,ro,br

Java应用。

package work.basil.example;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class App
{
    public static void main ( String[] args )
    {
        System.out.println ( "Hello World!" );
        App app = new App ();
        app.demo ();
    }

    private void demo ( )
    {
        try
        {
            // Read CSV file.
            Path pathInput = Paths.get ( "/Users/basilbourque/input.csv" );
            Path pathOutput = Paths.get ( "/Users/basilbourque/output.csv" );
            try (
                    final BufferedReader reader = Files.newBufferedReader ( pathInput , StandardCharsets.UTF_8 ) ;
                    final CSVPrinter printer = CSVFormat.RFC4180.withHeader ( "ID" , "name1" , "name3" ).print ( pathOutput , StandardCharsets.UTF_8 ) ;
            )
            {
                Iterable < CSVRecord > records = CSVFormat.RFC4180.withFirstRecordAsHeader ().parse ( reader );
                // We expect these headers: ID,name1,name2,name3
                for ( CSVRecord record : records )
                {
                    // Read.
                    Integer id = Integer.valueOf ( record.get ( "ID" ) );
                    String name1 = record.get ( "name1" );
                    String name2 = record.get ( "name2" );
                    String name3 = record.get ( "name3" );
                    System.out.println ( "id: " + id + " | name1: " + name1 + " | name2: " + name2 + " | name3: " + name3 );

                    // Write.
                    printer.printRecord ( id , name1 , name3 );
                }
            }
        } catch ( InvalidPathException e )
        {
            e.printStackTrace ();
        } catch ( IOException e )
        {
            e.printStackTrace ();
        }
    }
}

控制台输出。

  

id:1 | name1:您好| name2:地狱| name3:hel

     

id:2 | name1:尝试|名称2:tr |名称3:t

     

id:3 | name1:浏览器|名称2:ro | name3:br

生成的文件名为output.csv

ID,name1,name3
1,hello,hel
2,try,t
3,browser,br