我尝试用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
我发现只有操作行而不是列。
答案 0 :(得分:2)
删除CSV文件中列的唯一方法是删除整个文件中此列的标题和信息,即文件的每一行。即使您使用第三方库,它也会在内部执行此操作。
答案 1 :(得分:0)
读入每一行的每个列值,并仅写出所需的列,同时跳过不需要的列值。
这是一个示例应用程序,演示了如何使用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