簡體   English   中英

如何檢測文件中的字符串是否已被編輯或添加?

[英]How to detect if a string in a file has been edited or added?

在下面的示例中,我能夠識別整體變化。 但我無法獲得單獨編輯或添加的字符串。 是否有任何算法/方法來檢測字符串是否在文件中被編輯、添加或刪除? 我試過 java File Watcher,但它只檢測一個文件,無論該文件是否已被編輯或創建或刪除或修改文件中的任何內容。 它不提供已在文件中執行的更改。

diffFiles function 只檢查兩個文件中的字符串是否匹配。 我已經制作了基本文件的副本並檢查了差異:

public HashMap<String, Integer> diffFiles(List<String> firstFileContent, List<String> secondFileContent) throws IOException {  
      Integer count = 0;
      final HashMap<String, Integer> diff = new HashMap<String, Integer>();
      for (final String line : firstFileContent) {
          count += 1;
          if (!secondFileContent.contains(line)) {
              diff.put(line, count);
          }
      }
      return diff;
  }

我想單獨識別文件中的字符串是否已在文件中編輯或添加

您可以使用名為 Checksum 的 class,它用於檢查是否已收到完整的消息,Checksum 進行干預以確保不會丟失任何位

這里有一些方法可以做到這一點:

校驗和

它是您數據的簡短表示。

代碼:

var content = "this is my file content"
var b = content.getBytes()

要計算每個文件,您需要:

public static long getChecksum(byte[] bytes) {
    Checksum crc32 = new CRC32();
    crc32.update(bytes, 0, bytes.length);
    return crc32.getValue();
}

如果兩者long相同。 它們是完全相同的內容。

Apache Commons 編解碼器

您也可以使用 sha256 和 Apache Commons Codecs 來做到這一點:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.11</version>
</dependency>

驗證是:

String sha = DigestUtils.sha256Hex(yourFullFileContentString);

如果兩個字符串(例如: sha )相同。 你有一個相同的內容。

番石榴圖書館

谷歌圖書館也有同樣的可能

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>20.0</version>
</dependency>

這里的代碼:

var sha = Hashing.sha256()
  .hashString(yourFullFileContentString, StandardCharsets.UTF_8).toString();

選擇哪一個

我會選擇校驗和,因為它不是安全 hash 算法 (SHA)。

通過實施diffFiles() ,您將獲得第一個文件中的所有行,但在第二個文件中丟失了。

它不會為您提供第二個文件中的所有行,但不會提供第一個文件中的所有行。 它會將在第二個文件中移動位置的行報告為“未更改”。

正如您已經注意到的那樣,您無法確定是否添加/插入了一行,或者是否剛剛修改了現有行(例如,修復了一個錯字)。


您要求的基本上是“diff”工具的 Java 實現,而 StackOverflow 已經為此提供了很多答案:

可能還有更多,一些答案只是建議使用一些庫,而另一些答案則沒有 go 獲得所需解決方案的完整路徑,但所有答案都應該讓您了解如何繼續。

而且這里的鏈接確實也出現在右側欄是因為這些鏈接在這里......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM