Carriage Return and Line Feed windows and Linux java application

余生长醉 提交于 2019-12-02 17:18:04

问题


I am working on a integration test application, this is what I am doing in the test case, I read a test input file,which is stored in the cvs , write it to a file in the file system,the application polls the directory for the file, processes it and creates the output file, and I poll the directory for the output file, test case is successful if the both the file contents are equal(I am reading the both input files and output files into strings and comparing them).

The problem is this test case fails when its runs in a linux system, the reason being the file which is stored in the cvs was checked in from a windows system which contains CRLF as the line terminations whereas the output file generated has the line terminations as CR,now when I read these files and compare them character by character, they are having a mismatch.

could anyone help here.


回答1:


You can check the line separator for the host operating system using System.getProperty("line.separator")

Since you're using text files, you can also compare the file contents line by line. Check LineNumberReader.readLine() for that.




回答2:


You can try to compare them by lines. E.g. use FileUtils for this.

List<String> file1 = FileUtils.readLines(...);
List<String> file2 = FileUtils.readLines(...);
return file1.equals(file2);



回答3:


You could remove all the '\r' characters from the downloaded file? Or replace the "\r\n" Windows string by the "\n" Linux one. Beware of the Mac case too: end of line could be identified by "\r".




回答4:


When you check in the file, you can tell CVS it's a binary file (cvs add -kb), and then CVS will not convert line endings along the way.

This has other drawbacks too, e.g. no proper diff, but if you really test character by character, I guess you don't need that.

Please note that you must specify -kb when adding the file, you can't change it later.



来源:https://stackoverflow.com/questions/8755553/carriage-return-and-line-feed-windows-and-linux-java-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!