我正在从resultSet填充文件,如下所示:
while(rs.next()){
String[] entries = new String[3];
entries[0] = rs.getString(1);
entries[1] = ",";
entries[2] = rs.getString(2);
println("entries : "+entries);
writer.writeNext(entries);
}
Run Code Online (Sandbox Code Playgroud)
当我打开excel文件时,值包含双引号.所以test1,test2,test3从数据库读取并写入.csv文件时变为"test1","test2","test3"
如何将文本写入文件但不包括引号?
当我将条目打印到控制台时,不会打印双引号,所以我不知道它们被添加到何处?
obs*_*kie 20
只是为了扩展Matten的答案,使用CSVWriter中的内置字符来指定quotechar.所以你的作家看起来如下:
CSVWriter writer = new CSVWriter(new FileWriter(fileName), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
Run Code Online (Sandbox Code Playgroud)
由于当有人查找 OpenCSV 和引用问题时,这个问题首先出现在 google 结果中,因此我将在此处添加较新的解决方案。
我使用的是 4.6 版本,确实可以跳过引号,同时保留包含分隔符的完整引号。
示例代码:
List<SomeCsvEntryTO> csvEntries = new ArrayList<>();
csvEntries.add(new SomeCsvEntryTO("sdf1", "sdf2"));
csvEntries.add(new SomeCsvEntryTO("hgh1", "hgh2;hghgh2"));
Writer writer = new FileWriter(filePath);
StatefulBeanToCsv<SomeCsvEntryTO> csvWriter = new StatefulBeanToCsvBuilder<SomeCsvEntryTO>(writer)
.withSeparator(';')
.withApplyQuotesToAll(false)
.build();
csvWriter.write(csvEntries);
writer.close();
Run Code Online (Sandbox Code Playgroud)
SomeCsvEntryTO:
public class SomeCsvEntryTO{
@CsvBindByName(column = "sample1colname")
private String sample1;
@CsvBindByName(column = "sample2colname")
private String sample2;
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,我使用分号作为分隔符,并且不更改 quotechar。只需将 更改withApplyQuotesToAll为false.
这会产生以下结果:
SAMPLE1COLNAME;SAMPLE2COLNAME
sdf1;sdf2
hgh1;"hgh2;hghgh2"
Run Code Online (Sandbox Code Playgroud)
Sud*_*hul -2
您可以使用Constructor@Matten 提到的 ,同时使用 的另一个writeAll ()CSVWriter。
OpenCSV还支持将 SQL 表中的数据直接转储到 CSV。为此,我们需要 ResultSet 对象。以下API可用于将数据从 ResultSet 写入 CSV。
java.sql.ResultSet myResultSet = getResultSetFromSomewhere();
writer.writeAll(myResultSet, includeHeaders);
Run Code Online (Sandbox Code Playgroud)
该writeAll(ResultSet, boolean)方法就是用于此目的。第一个参数是ResultSet您要写入CSV文件的内容。第二个参数boolean表示是否要将标题列(表列名称)写入文件。