Java 是否有要转换为本地系统换行符的FilterInputStream?

Java 是否有要转换为本地系统换行符的FilterInputStream?,java,linux,macos,Java,Linux,Macos,我是平台上的开发人员之一,该平台除其他功能外,允许用户上传数据文件(来自不同的来源),以便使用各种脚本进行处理 Excel for Mac中以制表符分隔的数据文件不断出现问题。Excel for Mac(甚至OS X)以CR字符(\r)结束其行;Linux(和现代Mac)标准是LF(\n)。(Windows是CR LF,又名\r\n。)脚本在Linux机器上运行,因此它们绝对无法将单个\r字符识别为行终止符 在后端,我们通过JCR节点的常用API将InputStream提供给JCR节点。我想要一

我是平台上的开发人员之一,该平台除其他功能外,允许用户上传数据文件(来自不同的来源),以便使用各种脚本进行处理

Excel for Mac中以制表符分隔的数据文件不断出现问题。Excel for Mac(甚至OS X)以CR字符(\r)结束其行;Linux(和现代Mac)标准是LF(\n)。(Windows是CR LF,又名\r\n。)脚本在Linux机器上运行,因此它们绝对无法将单个\r字符识别为行终止符

在后端,我们通过JCR节点的常用API将InputStream提供给JCR节点。我想要一个FilterInputStream为我们进行换行转换。我们自己编写的代码不多,但这是针对明显的情况;如果有一个罐头图书馆可以这样做,我们会更喜欢它,因为希望其他人能为我们计算出边缘条件

在FilterInputStream或其他InputStream中是否有一个开源库可以将几乎任何标准换行格式转换为LF(或系统换行字符)?一些谷歌搜索没有发现任何明显的东西,但如果没有什么,我会感到惊讶


如果没有,什么样的边缘条件可能会让我写这篇文章呢?

使用BufferedReader.readLine()。这将解析并删除存在的任何行终止符。然后,在将每一行写入后端时,附加您喜欢的任何行终止符。

既然您关心CSV文件,您是否关心其中的空行?如果没有,只需编写自己的筛选器,将所有连续(\n\r)+转换为单个(\n),即可设置。请注意,空行不会产生空行。

如果你能找到一种方法,让所有这些达尔文程序停止使用MacRoman并停止为换行符发射CR,那么世界肯定会为你的孩子唱赞歌。愿他们发射带有NL断线的UTF-8,愿他们永远搁置他们破碎的遗产。a
BufferedReader.readLine()有两个问题。
。首先,您无法知道读取时是否有0、1或2个字符,这有时很重要:您无法用它复制文件!另一个问题是你把它放在什么上面。如果您使用的是
InputStreamReader
,请注意其构造函数中有四分之三已损坏且无法使用!!!有效的那一个是从来没有人用过的(我正在使用Apache的Java内容存储库接口。它直接接收InputStream;通过BufferedReader将其传回需要我通过StringWriter/StringReader/something将整个文件流到内存中,以将其转换为流。我将检查它的JCR API的其他入口点,但tchrist在这里是正确的。)不幸的是,我不能假设我所有的文件都是CSV。我将编写一个足够聪明的FilterInputStream来识别非文本类文件并避免损坏它们。