| categories |
|
|||||
|---|---|---|---|---|---|---|
| date | 2026-01-18 | |||||
| description | Naucz się porównywać wiele plików Word przy użyciu porównywania dokumentów w strumieniu Java z GroupDocs.Comparison. Kompletny samouczek z przykładami kodu i wskazówkami rozwiązywania problemów. | |||||
| keywords | Java document comparison stream, GroupDocs comparison Java tutorial, stream based document comparison, Java Word document diff, how to compare multiple Word documents Java | |||||
| lastmod | 2026-01-18 | |||||
| linktitle | Java Stream Document Comparison | |||||
| tags |
|
|||||
| title | Porównaj wiele plików Word za pomocą strumieni Java | GroupDocs | |||||
| type | docs | |||||
| url | /pl/java/document-loading/java-stream-comparison-groupdocs-comparison/ | |||||
| weight | 1 |
Czy kiedykolwiek znalazłeś się pogrążony w wersjach dokumentów, próbując ustalić, co zmieniło się między różnymi wersjami? Nie jesteś sam. Niezależnie od tego, czy masz do czynienia z umowami, raportami czy dokumentami współtworzonymi, porównywanie wielu plików Word ręcznie to koszmar, który pochłania cenny czas. W tym przewodniku pokażemy, jak wykonać porównanie dokumentów przy użyciu strumieni Java z wykorzystaniem biblioteki GroupDocs.Comparison, abyś mógł zautomatyzować proces, efektywnie obsługiwać duże pliki i stylować wyniki dokładnie tak, jak potrzebujesz.
- Jaka biblioteka obsługuje porównanie oparte na strumieniach? GroupDocs.Comparison for Java
- Jakie główne słowo kluczowe jest celem tego samouczka? compare multiple word files
- Jaka wersja Javy jest wymagana? JDK 8 lub wyższa (zalecane Java 11+)
- Czy potrzebna jest licencja? Darmowa wersja próbna działa w ocenie; licencja komercyjna jest wymagana w produkcji
- Czy mogę porównać więcej niż dwa dokumenty jednocześnie? Tak – API obsługuje wiele docelowych strumieni w jednym wywołaniu
Porównanie oparte na strumieniach odczytuje dokumenty w małych fragmentach zamiast ładować cały plik do pamięci. Dzięki temu możliwe jest porównywanie wielu plików Word, nawet gdy mają one rozmiary rzędu dziesiątek lub setek megabajtów, co utrzymuje aplikację responsywną i przyjazną dla pamięci.
- Wydajność pamięciowa – idealna dla dużych umów lub przetwarzania wsadowego.
- Skalowalność – porównaj dokument główny z dziesiątkami wariantów w jednej operacji.
- Konfigurowalne stylowanie – podświetlaj wstawienia, usunięcia i modyfikacje w wybrany sposób.
- Gotowość do chmury – działa ze strumieniami z plików lokalnych, baz danych lub przechowywania w chmurze (np. AWS S3).
Zanim przejdziemy do kodu, sprawdźmy, czy Twoje środowisko programistyczne jest gotowe.
- JDK 8+ (Java 11 lub 17 zalecane)
- Maven (lub Gradle, jeśli wolisz)
- GroupDocs.Comparison library (najnowsza stabilna wersja)
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/comparison/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-comparison</artifactId>
<version>25.2</version>
</dependency>
</dependencies>Wskazówka: Jeśli znajdujesz się za zaporą korporacyjną, skonfiguruj settings.xml Mavena z danymi proxy.
- Free Trial – wynik z znakiem wodnym, idealny do testów.
- Temporary License – przedłużony okres oceny.
- Commercial License – wymagana w środowiskach produkcyjnych.
| Sytuacja | Zalecane |
|---|---|
| Duże pliki Word (50 MB +) | ✅ Użyj strumieni |
| Środowiska z ograniczoną pamięcią RAM (np. kontenery Docker) | ✅ Użyj strumieni |
| Przetwarzanie wsadowe wielu umów | ✅ Użyj strumieni |
| Małe pliki (< 10 MB) lub jednorazowe sprawdzenia | ❌ Porównanie zwykłych plików może być szybsze |
Poniżej znajduje się kompletny, gotowy do uruchomienia kod, który demonstruje, jak porównać wiele plików Word przy użyciu strumieni i zastosować niestandardowe stylowanie.
try (InputStream sourceStream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/SOURCE_WORD");
InputStream target1Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET1_WORD");
InputStream target2Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET2_WORD");
InputStream target3Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET3_WORD");
OutputStream resultStream = new FileOutputStream(outputFileName);
Comparer comparer = new Comparer(sourceStream)) {Co się dzieje?
Otwieramy strumień źródłowy (dokument bazowy) oraz trzy strumienie docelowe (warianty, które chcemy porównać). Comparer jest tworzony z użyciem strumienia źródłowego, ustanawiając punkt odniesienia dla wszystkich kolejnych porównań.
comparer.add(target1Stream, target2Stream, target3Stream);Dodanie wielu celów w jednym wywołaniu jest znacznie wydajniejsze niż wywoływanie oddzielnych porównań dla każdego pliku.
final Path resultPath = comparer.compare(resultStream,
new CompareOptions.Builder()
.setInsertedItemStyle(
new StyleSettings.Builder()
.setFontColor(Color.YELLOW)
.build())
.build());Tutaj nie tylko wykonujemy porównanie, ale także instruujemy GroupDocs, aby podświetlał wstawiony tekst na żółto. Możesz w podobny sposób dostosować usunięte lub zmodyfikowane elementy.
Jeśli potrzebujesz bardziej dopracowanego wyglądu, możesz zdefiniować wielokrotnego użytku StyleSettings.
try (InputStream sourceStream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/SOURCE_WORD");
InputStream target1Stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/TARGET_WORD");
OutputStream resultStream = new FileOutputStream(outputFileName);
Comparer comparer = new Comparer(sourceStream)) {final StyleSettings styleSettings = new StyleSettings();
styleSettings.setFontColor(Color.YELLOW);
CompareOptions compareOptions = new CompareOptions();
compareOptions.setInsertedItemStyle(styleSettings);final Path resultPath = comparer.compare(resultStream, compareOptions);Porady dotyczące stylowania
- Wstawienia – żółte tło dobrze sprawdza się przy szybkim przeglądzie wizualnym.
- Usunięcia – czerwone przekreślenie (
setDeletedItemStyle) wyraźnie sygnalizuje usunięcie. - Modyfikacje – niebieskie podkreślenie (
setModifiedItemStyle) utrzymuje czytelność dokumentu. - Unikaj neonowych kolorów; męczą oczy podczas długich recenzji.
Problem: OutOfMemoryError
Rozwiązanie: Zwiększ pamięć heap JVM lub dopasuj buforowanie strumieni.
java -Xms512m -Xmx2g YourApplication- „Stream closed” – upewnij się, że tworzysz nowy
InputStreamdla każdego porównania; strumienie nie mogą być ponownie użyte po odczytaniu. - Wycieki zasobów – bloki
try‑with‑resourcesjuż obsługują zamykanie, ale sprawdź ponownie wszelkie własne narzędzia.
Upewnij się, że rozszerzenie pliku odpowiada rzeczywistemu formatowi (np. prawdziwy plik .docx, a nie przemianowany .txt).
- Używaj dysków SSD dla szybszego I/O.
- Zwiększ rozmiary buforów (zobacz następną sekcję).
- Przetwarzaj partie 5‑10 dokumentów równolegle, zamiast wszystkich naraz.
// Use larger buffers for big files
BufferedInputStream bufferedSource = new BufferedInputStream(sourceStream, 32768);-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions- Pliki poniżej 1 MB przechowywane na szybkich lokalnych SSD.
- Proste, jednorazowe porównania, gdzie narzut obsługi strumieni przewyższa korzyści.
| Domena | Jak porównanie strumieniowe pomaga |
|---|---|
| Legal | Porównaj główną umowę z dziesiątkami wersji specyficznych dla klienta, podświetlając wstawienia na żółto dla szybkiego przeglądu. |
| Software Docs | Śledź zmiany w dokumentacji API pomiędzy wydaniami; porównuj partie wielu wersji w pipeline'ach CI. |
| Publishing | Redaktorzy mogą zobaczyć różnice między wersjami rękopisu od różnych współautorów. |
| Compliance | Audytorzy weryfikują aktualizacje polityk w różnych działach bez ładowania pełnych plików PDF do pamięci. |
- Spójne nazewnictwo – Dodawaj numery wersji lub daty w nazwach plików.
- Testuj na rzeczywistych danych – Próbki plików „Lorem ipsum” ukrywają przypadki brzegowe.
- Monitoruj pamięć – Używaj JMX lub VisualVM w produkcji, aby wcześnie wykrywać skoki.
- Strategiczne partiowanie – Grupuj 5‑10 dokumentów na zadanie, aby zrównoważyć przepustowość i zużycie pamięci.
- Łagodne obsługiwanie błędów – Przechwytuj
UnsupportedFormatExceptioni informuj użytkowników jasnymi komunikatami.
Q: Jaka jest minimalna wersja JDK?
A: Java 8 jest minimalna, ale Java 11+ jest zalecana dla lepszej wydajności i bezpieczeństwa.
Q: Jak mogę obsłużyć bardzo duże dokumenty?
A: Użyj podejścia opartego na strumieniach przedstawionego powyżej, zwiększ pamięć heap JVM (-Xmx) i rozważ większe rozmiary buforów.
Q: Czy mogę również stylować usunięcia i modyfikacje?
A: Tak. Użyj setDeletedItemStyle() i setModifiedItemStyle() na CompareOptions, aby określić kolory, czcionki lub przekreślenia.
Q: Czy to nadaje się do współpracy w czasie rzeczywistym?
A: Porównanie strumieniowe doskonale sprawdza się przy przetwarzaniu wsadowym i audycie. Edytory w czasie rzeczywistym zazwyczaj potrzebują lżejszych rozwiązań opartych na diffie.
Q: Jak porównać pliki przechowywane w AWS S3?
A: Pobierz InputStream za pomocą AWS SDK (s3Client.getObject(...).getObjectContent()) i przekaż go bezpośrednio do Comparer.
- Dokumentacja: GroupDocs.Comparison for Java Documentation
- Referencja API: Complete API Reference
Ostatnia aktualizacja: 2026-01-18
Testowano z: GroupDocs.Comparison 25.2
Autor: GroupDocs