如何在java中获取任何文件的EOL字符

时间:2012-01-23 09:32:48

标签: java file-io

我正在尝试查找文件的EOL字符。我尝试过以下代码段:

java.io.FileInputStream inputStream = null;  
inputStream=new java.io.FileInputStream (inputFile.trim());
java.util.Properties p = new java.util.Properties(System.getProperties());  
p.load(inputStream);  
System.setProperties(p);  
String lineSeperator=System.getProperties().getProperty("line.separator");  
System.out.println("--"+lineSeperator);

我到达此处的结果始终为\r\n,即使我正在阅读Linux来源的文件,其中分隔符应为\n

我做错了什么?

2 个答案:

答案 0 :(得分:9)

System.getProperty("line.separator")返回操作系统的默认行分隔符。它与给定文件使用的行分隔符无关。

要找到它,请将该文件作为字符流打开,然后对字符进行迭代,直到找到'\r''\n'。如果您首先找到'\n',那么您有一个unix文件。如果您发现'\r'后跟'\n',则会有一个Windows文件。如果您发现'\r'后面没有'\n',则表示您有一个旧的Mac文件。

这当然假设文件首先是文本文件,文件中使用了一种EOL,并且您知道文件的编码。如果您不知道编码,则可以使用相同的算法并使用字节流而不是字符流。

请注意,这在大多数情况下是无关紧要的,因为Java具有逐行读取文件的API,并且可以正常处理所有EOL组合。

答案 1 :(得分:1)

那是因为你正在阅读OS相关的财产。如果你在windows中运行这个程序,即使你的文件是在linux上创建的,你也会得到\ r \ n作为行分隔符。要在输入文件中找到行尾,您需要找到其他方法...也许正则表达式可以帮助您。