[英]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
相同。 它們是完全相同的內容。
您也可以使用 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.