我正在使用com.opencsv.CSVReader
从我的 nginx Web 服务器提供的 URL 读取 CSV。CSV 文件内容正是这样:
0.999,1.399,1.799,2.199,2.599,2.999,3.399,3.799,4.199,4.599,4.999,5.399
问题是,当我读取文件时,我没有得到 csv 值:
try (InputStreamReader in = new InputStreamReader(new URL(...csv).openStream(), "UTF-8"); CSVReader r = new CSVReader(in)) {
List<String[]> csv = r.readAll();
....
在此之后, csv 无法获取数据(但没有引发错误),并且csv.get(0).length
错误地1
为空字符串。我不知道为什么。我为隔离问题所做的测试:
在阅读 csv 之前,我已经使用 aBufferedReader
来查看其中的内容in
,我得到了:
Date: Fri, 10 Aug 2018 03:11:13 GMT
Content-Type: text/plain
Content-Length: 71
Last-Modified: Wed, 12 Jul 2017 16:23:24 GMT
Connection: keep-alive
ETag: "..."
Strict-Transport-Security: max-age=31536000
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Accept-Ranges: bytes
0.999,1.399,1.799,2.199,2.599,2.999,3.399,3.799,4.199,4.599,4.999,5.399
所以我不确定标头是否也被 csv 阅读器读取并以某种方式弄乱了它。
我使用相同的代码来访问外部 CSV 而不是由我的 nginx 提供的代码,它运行良好,并且使用BufferedReader
外部 CSV的测试没有显示任何标题,仅显示 csv 值。
这就是为什么我还考虑它可能是 nginx 问题的原因,因为我最近还遇到了文件未完成下载的错误,我不得不将之前keepalive_timeout 65
运行良好的keepalive_timeout 0
. 我不知道为什么这突然发生了。
这很难调试,但解决方案是重新安装nginx,因为我的副本已损坏。我的 nginx 实例发送了额外的\r
字符,这些字符不会干扰curl
或类似,但会破坏 Java 实现。
顺便说一句 - 这可能突出了.openStream()
实现中的一个错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句