Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨平台比较文件内容_Java_Unit Testing_File Io - Fatal编程技术网

Java 跨平台比较文件内容

Java 跨平台比较文件内容,java,unit-testing,file-io,Java,Unit Testing,File Io,我有一个在Windows上创建的文件,因此它有回车“\r\n” 在测试中使用该文件时,将该文件的内容与测试期间生成的文件的内容进行比较。测试在Windows上通过,因为生成的文件具有相同的回车符 但是这个测试在Unix/Mac上没有通过 它失败,因为生成的文件有换行符,即只有“\n” 有人能建议如何处理这个问题吗 编辑: 该测试是JUnit(Java)测试。 您可以逐行比较读取它们的文件 您可以有两个不同的unix/windows示例文件 您可以尝试以下方法,以避免逐行阅读 String tex

我有一个在Windows上创建的文件,因此它有回车“\r\n”

在测试中使用该文件时,将该文件的内容与测试期间生成的文件的内容进行比较。测试在Windows上通过,因为生成的文件具有相同的回车符

但是这个测试在Unix/Mac上没有通过

它失败,因为生成的文件有换行符,即只有“\n”

有人能建议如何处理这个问题吗

编辑: 该测试是JUnit(Java)测试。

  • 您可以逐行比较读取它们的文件
  • 您可以有两个不同的unix/windows示例文件

您可以尝试以下方法,以避免逐行阅读

String text = FileUtils.readFileAsString(filename)
                       .replaceAll("(\r\n|\r|\n)", "\n");

这会将任何类型的所有新行替换为“\n”

我最终没有使用真实的文件,并让测试在运行时使用system属性在平台上创建文件,以获取平台行终止符。

选项1是一种可能性,但这是一种低级方法。选项2增加了维护2个文件的开销,并增加了根据操作系统决定测试中需要哪个文件的复杂性,这并不理想。感谢您的回复。如果是JUnit,最好的选择是更新您的比较函数/过程。除非逐字节比较文件,否则可以使用正则表达式将行分隔符(unix和win)替换为某些预期的字符序列(例如,
|n
),这可能是最好的解决方案,因为它首先可以防止问题。