使用PHP

时间:2016-06-18 22:36:34

标签: java php

我有一个通过运行以下代码行动态创建的文本文件。

 if (system('javac main.java 2>ErrorFile.txt')!==false)
    {
        exec('java main 1>OutputFile.txt<filename.txt');
    }

我现在想将OutputFile.txt与sample.txt进行比较。我使用了以下功能,但它并没有帮助我。任何人都可以帮帮我!

function filecomparision($a, $b) {
   if(filesize($a) !== filesize($b)){
        return false;   $ah = fopen($a, 'rb');   $bh = fopen($b, 'rb');
        $result = true;   while(!feof($ah)) {
             if(fread($ah, 8192) != fread($bh, 8192)) {
               $result = false;
               break;
             }   
        }
        fclose($ah);   fclose($bh);
        return $result; 
   }
}

当我尝试上述功能时,即使内容相同,我的文件也有两种不同的大小。并且它将OutputFile.txt的内容显示为八进制内容。

2 个答案:

答案 0 :(得分:0)

<?php
/**
 * @param $a string
 * @param $b string
 * @return bool
 */
function filecomparision($a, $b) {
    // assuming both of files are exists
    return md5(file_get_contents($a)) === md5(file_get_contents($b));
}
  

建议:当内容看起来相同时,您可以使用不同的大小,因为您的java应用程序可以使用其他字符集或不同的EOL标记。

我不知道如何纠正它。您可以尝试替换EOL。

<?php
function filecomparision($a, $b) {
    // assuming both of files are exists
    $a = preg_replace('/(\r\n|\n\r|\r)/', "\n", file_get_contents($a));
    $b = preg_replace('/(\r\n|\n\r|\r)/', "\n", file_get_contents($b));
    return md5($a) === md5($b);
}
  

更新此特定情况:

<?php
function filecomparision($a, $b) {
    // assuming both of files are exists
    $a = preg_replace('/(\r\n|\n\r|\r)/', "\n", rtrim(file_get_contents($a)));
    $b = preg_replace('/(\r\n|\n\r|\r)/', "\n", rtrim(file_get_contents($b)));
    return md5($a) === md5($b);
}

答案 1 :(得分:0)

我尝试覆盖文件,删除多余的字符。

     $v = rtrim(file_get_contents($b),"\x0D\x0A");   
     $MyFile = fopen($b, "w") or die("Unable to open file!");
     fwrite($MyFile,$v);
     fclose($MyFile);

我添加了这段代码,现在一切正常。

相关问题