Eclipse:CSV 解析标准输入时未检测到 EOF

Posted

技术标签:

【中文标题】Eclipse:CSV 解析标准输入时未检测到 EOF【英文标题】:Eclipse: EOF not detected when CSV-parsing standard input 【发布时间】:2021-12-22 09:44:36 【问题描述】:

使用“Common”选项卡中的 Eclipse (2021-06, 4.20.0) 运行配置设置将 csv 文件附加到标准输入。将 CSV 解析器附加到标准输入。

从解析器中提取 CSV 记录会获取所有文件内容,但不会检测到 EOF。 opencsv-5.5.2 和 apache-csv-1.9.0(以及我公司的旧 csv 解析器)都会出现这种情况。

例如使用 opencsv:

var isr = new InputStreamReader(System.in);
var br = new BufferedReader(isr);
var reader = new CSVReader(isr /* or br */);
while ( (csv_record = reader.readNext()) != null) 
    // foo

在读取所有 csv 行后挂在 FileInputStream.readBytes 中。调用栈:

Thread [main] (Suspended)   
    owns: BufferedInputStream  (id=75)  
    owns: InputStreamReader  (id=22)    
    FileInputStream.readBytes(byte[], int, int) line: not available [native method] 
    FileInputStream.read(byte[], int, int) line: 279    
    BufferedInputStream.read1(byte[], int, int) line: 290   
    BufferedInputStream.read(byte[], int, int) line: 351    
    StreamDecoder.readBytes() line: 284 
    StreamDecoder.implRead(char[], int, int) line: 326  
    StreamDecoder.read(char[], int, int) line: 178  
    InputStreamReader.read(char[], int, int) line: 185  
    BufferedReader.fill() line: 161 
    BufferedReader.read() line: 182 
    CSVReader.isClosed() line: 399  
    CSVReader.getNextLine() line: 343   
    CSVReader.primeNextRecord() line: 235   
    CSVReader.flexibleRead(boolean, boolean) line: 598  
    CSVReader.readNext() line: 204  
    Main.main(String[]) line: 48    

所有 csv 解析器都挂在 FileInputStream.readBytes 中,具有类似的堆栈跟踪。

所有变体都在 Eclipse 之外运行良好,使用重定向。

这是一个已知的 Eclipse 错误吗?我搜索了但什么也没找到。

是否有任何已知的解决方法?

【问题讨论】:

Eclipse 不会运行您的代码,您选择的 Java VM 会运行您的代码。你很可能做错了什么。展示如何重现您的问题,以便可以帮助您(您显示的代码不足以重现您的问题)。目前尚不清楚您为什么为此使用System.in(可能永远不会关闭)而不是单独的InputStream 这看起来像this bug。这没有解决。最好避免像这样重定向 System.in 并直接指定文件名。 @howlger 1. Eclipse 重新连接标准输入,运行代码的 Java VM 不相关。 2. 当标准输入从文件重定向时 System.in 应该在 EOF 关闭(显然 Eclipse 没有这样做,请参阅错误报告)。 3. 当程序打算使用重定向运行时,使用 System.in。这是标准,应该清楚。 @Underhill 实际上,即使缺少可重复的示例,greg-449 也知道这一点。 【参考方案1】:

向 greg-449 致敬,这几乎可以肯定是一个 eclipse 错误:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=513713

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 @Tyler2P 这是错误报告的链接,证明这是一个已知问题,但没有已知的解决方法。所以,这里的链接就足够了。从其他地方复制内容是不好的,因为原始内容通常比堆栈溢出答案更好地维护。因为 Stack Overflow 的答案比原始内容更容易找到,这会导致人们首先获得过时的内容。 您可以评论该错误并帮助修复它。

以上是关于Eclipse:CSV 解析标准输入时未检测到 EOF的主要内容,如果未能解决你的问题,请参考以下文章

尝试将 hdfs 中的 csv 文件加载到配置单元表时未选择行

从通道读取时未检测到“死锁”

Swift - WebView 在加载时未检测到滑动

连接丢失时未检测到 QNetworkReply 错误信号

makemigrations 响应 指定 app_label 时未检测到更改

Nhibernate 在子集合更新时未检测到父项的更改