我对此很陌生,这可能是一个非常明显的答案。在我的csv脚本中,我试图弄清楚如何使用CSVReader类读取csv文件并写入新的csv文件。错误告诉我writeNext(java.lang.String [])不能应用于(java.lang.String)。我尝试过使用直接赋值和getString()方法但是没有任何效果。有任何想法吗?
我有以下代码: 已更新
public static void main(String[] args) throws IOException {
//read csv file
CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));
//write to csv file
CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t');
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
System.out.println("Name: [" + nextLine[0] + "]\nAddress: [" + nextLine[1] + "]\nEmail: [" + nextLine[2] + "]");
String[] newRow = new String[] {nextLine[0],nextLine[2], nextLine[1]};
}
//writer2.writeNext(entries);
writer2.writeAll(newRow);
writer2.close();
}
错误: c:\ java \ examples \ ETHImport.java:46:找不到symbo 符号:变量newRow location:ETHImport类 writer2.writeAll(NEWROW);
1错误
提前致谢。
答案 0 :(得分:3)
您需要一个字符串数组,而不是一个字符串。您真的确定要将所有值拉入单个字符串中吗?我希望writeNext
根据你给它的字符串值写一行, it 放入逗号等等。毕竟,它是CsvWriter
- 它应该用逗号分隔。
在我看来,您已经使用的writeAll
方法符合您的要求,而writeNext
只会写一行...您想要实现的目标是什么{ {1}}不适合你吗?为什么你需要逐行阅读并首先构建writeAll
?你不能打电话:
entries
我的猜测是,如果writer2.writeAll(allElements);
的构造方式如何,那将会写一个 tab -separated文件。
编辑:鉴于评论中的其他信息,我怀疑你想:
writer2
CsvReader
(使用适当的CsvWriter
和Writer
作为构造函数参数);
),为输出创建新的字符串数组,然后调用CsvReader.readNext()
将该字符串数组写入文件。 CsvWriter.writeNext()
和CsvReader
(如果出现任何问题,它们仍将关闭)从现有的字符串数组构建新的字符串数组将类似于(按照您的示例):
CsvWriter
基本上只保留前三列,转换第二列和第三列。如果您需要其他列,只需以相同的方式进行更改。
请注意,我不会建议使用String[] newRow = new String[] { oldRow[0], oldRow[2], oldRow[1] };
写入文件 - 使用FileWriter
和FileOutputStream
链接到该文件,因为这样可以您设置字符编码而不是使用平台默认编码。
答案 1 :(得分:2)
String[] entries = new String[] { "entry1", "entry2"};
期望一个条目数组而不仅仅是一个String。如果您按照此示例http://opencsv.sourceforge.net/注意到
String[] entries = "first#second#third".split("#");
最后的拆分调用导致String []。
代码:
public static void main(String[] args) throws IOException {
//read csv file
CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));
//write to csv file
CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t');
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
writer2.writeNext( new String[] {nextLine[0],nextLine[2], nextLine[1]});
}
writer2.close();
}
答案 2 :(得分:2)
轻松将String
放入String[]
使用:
String[] entriesArr = new String[]{ entries };
或快捷方式
String[] entriesArr = { entries };
现在entriesArr
是String[]
,其中包含一个元素entries
。
答案 3 :(得分:0)
writer.writeNext(String [])正在寻找一个数组,然后将其写为“[0],[1],[2]”
由于您将整个csv文件存储为一个字符串,因此需要拆分该字符串备份。实际上,您应该不将每个项目组合成一个字符串,而是将其存储为表示csv文件中每个单独行的字符串数组。