java - 读取 nginx 提供的 CSV 时出错
问题描述
我正在使用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
一个空字符串。我不知道为什么。我为隔离问题所做的测试:
- 我尝试通过 http 和 https 从我的 nginx 获取文件,结果相似。我必须说这段代码不久前运行良好,现在没有明显的原因它失败了。
在阅读 csv 之前,我使用 a
BufferedReader
来查看内容,然后得到: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()
实现中的一个错误。
推荐阅读
- c# - 无法在第二行扩展第一行高度
- javascript - 音频没有在 js 中播放
- angular - 未捕获(承诺):TypeError:无法读取未定义的属性“人”
- c++ - c++ - 无法读取二进制文件
- wordpress - 如何更改 Wordpress 中所需的评论消息?
- unity3d - Unity:如果从下方跳到平台,则忽略平台的碰撞。使用 ContactFilter 和rigidBody.Cast()
- c - 使用命令行参数计算矩阵行列式的 C 程序
- c# - 为 main、interface 和 class 创建一个单独的文件
- flutter - flutter - 在动画上创建弹性效果
- django - 在 Django 中添加表单外的字段值