我们正在使用 OpenCSV
(http://opencsv.sourceforge.net/apidocs/au/com/bytecode/opencsv/CSVWriter.html)
从包含 xml 内容的文件编写报告。
有两种方法可以解决这个问题 ->
i) 使用 FileOutputStream 写入
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osr= new OutputStreamWriter(fos);
writer = new CSVWriter(osr);
Run Code Online (Sandbox Code Playgroud)
ii) 使用 BufferedWriter 写入
BufferedWriter out = new BufferedWriter(new FileWriter(file));
writer = new CSVWriter(out);
Run Code Online (Sandbox Code Playgroud)
有谁知道选择一个选项而不是另一个选项会如何影响本报告的撰写绩效?
据我了解,OpenCSV 并不关心只要它获得可以使用的流即可。
性能的增量(差异)将是其之前的步骤,其中从文件创建输出流。
使用OutputStreamWriter与BufferedWriter对性能有何影响?
我依赖 OpenCSV 3.8 并且发布构建失败并出现 ProGuard 错误:
警告:org.apache.commons.beanutils.MappedPropertyDescriptor:在程序类 org.apache.commons.beanutils.MappedPropertyDescriptor 中找不到引用的方法“void setName(java.lang.String)”
我可以尝试忽略它,但这听起来不是很好的解决方案。
有趣的是,OpenCSV 3.8 依赖于 commons-beanutils 1.9.3,而本地安装的是 1.9.2。
我正在尝试上传 CSV 文件来执行某些操作。我正在使用 OpenCSV 5.7.1 版本来处理 CSV 文件。到目前为止,我只是简单地探索功能,即一个用于上传文件的 API,然后读取该文件(如果它能够获取数据)。
控制器类:
@PostMapping(value = "/upload")
public ResponseEntity<MyAppResponse> processCsvUpload(@RequestParam("file") MultipartFile file, @RequestParam("request") String uploadRequest) {
//call service method
}
Run Code Online (Sandbox Code Playgroud)
服务等级:
Reader reader = null;
try {
reader = new InputStreamReader(file.getInputStream());
} catch (IOException e) {
logger.error("");
e.printStackTrace();
throw new MvAppException();
}
CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();
try {
List<String[]> rows = csvReader.readAll();
for (String[] arr : rows) {
for (String temp : arr)
System.out.print(temp + ", ");
System.out.println("");
}
} catch (IOException | …Run Code Online (Sandbox Code Playgroud) 我有以下代码,其中逐行读取.csv文件,并存储在String [] nextline中,其中nextline [i]由解析文件的相应内容填充.我在读取.csv文件时没有遇到任何问题,但我确实将它们存储在另一个String []中,因为System.out.println()为所有行提供了以下结果:
Nextline[1]=Jan 4, 2011 18:33:15.988422000 / predata=null / Nextline[4]=54 / size:0
Run Code Online (Sandbox Code Playgroud)
如您所见,Strin []具有null值,为什么内容未传递?提前致谢
public class Amostra {
int[] id = new int[20000];
String[] predata = new String[20000];
int[] size = new int[20000];
Amostra(String namefile) throws FileNotFoundException, IOException {
Csv2Array(namefile);
}
private void Csv2Array(String newfile) throws FileNotFoundException, IOException
{
String[] nextline;
int j = 0;
int i = 0;
CSVReader reader = new CSVReader(new FileReader(newfile), ';', '\'', 1);
while((nextline = reader.readNext()) != null){
predata[i] = nextline[1];
size[i] …Run Code Online (Sandbox Code Playgroud) 我有个问题:
我正在尝试将我的 CSV 文件转换为 XML 文件,并且我看到了这篇文章的响应:Java lib 或应用程序将 CSV 转换为 XML 文件?
我看到我需要使用这个 OpenCSV 库,特别是,我必须使用以下代码:
CSVReader reader = new CSVReader(new FileReader(startFile));
Run Code Online (Sandbox Code Playgroud)
在哪里 String startFile = "./startData.csv";
现在,我没有得到一个字符串作为 startFile,但我有一个byte[],因为对于其他问题,我已经将我的文件转换为 byte[]。如何将此代码与 byte[] 一起使用?
有替代品吗?
谢谢
我正在使用 opencsv 2.3,它似乎没有像我期望的那样处理转义字符。我需要能够处理不使用引号字符的 CSV 文件中的转义分隔符。
示例测试代码:
CSVReader reader = new CSVReader(new FileReader("D:/Temp/test.csv"), ',', '"', '\\');
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
for (String string : nextLine) {
System.out.println("Field [" + string + "].");
}
}
Run Code Online (Sandbox Code Playgroud)
和 csv 文件:
first field,second\,field
Run Code Online (Sandbox Code Playgroud)
和输出:
Field [first field].
Field [second].
Field [field].
Run Code Online (Sandbox Code Playgroud)
请注意,如果我将 csv 更改为
first field,"second\,field"
Run Code Online (Sandbox Code Playgroud)
然后我得到了我所追求的输出:
Field [first field].
Field [second,field].
Run Code Online (Sandbox Code Playgroud)
但是,就我而言,我没有修改源 CSV 的选项。
我有一个 csv 文件。我想用 Java 编写一个函数,它会告诉我 csv 中有多少行。有人可以帮助我实现这一目标。
csv有以下格式:
"Time","Actual","Time","Expected","Time","Status"
"2012-09-01 00:00:00",580.543,"2012-09-01 00:00:00",570.761,"2012-09-01 01:00:00",0
"2012-09-01 01:00:00",646.703,"2012-09-01 01:00:00",672.926,"2012-09-01 02:00:00",0
"2012-09-01 02:00:00",680.705,"2012-09-01 02:00:00",687.784,"2012-09-01 03:00:00",0
"2012-09-01 03:00:00",661.968,"2012-09-01 03:00:00",702.436,"2012-09-01 04:00:00",0
Run Code Online (Sandbox Code Playgroud)