Porównanie dwóch linii z dwóch plików i zapisanie pasującej do trzeciego pliku w javie

0

Witam mam problem z moim kodem. Staram się pobrać do jednej zmiennej linię z pierwszego pliku, do drugiej zmiennej linię z drugiego pliku i je porównać, za pomocą metody equals. Jeżeli są takie same, zapisuję ją w trzecim pliku, jeżeli nie sprawdzam dalej. Przeszukiwanie ma odbywać się na zasadzie każdy z każdym, tj. program ma pobrać jedną linię z pierwszego pliku, sprawdzić czy pasuje do którejkolwiek z drugiego i tak dalej.
Problem polega na tym, że mój program tworzy plik, lecz nic nie zapisuje. Nawet osobnego bw.write("End"). Próbowałem także użyć bw.flush() mimo, że nie bardzo go rozumiem (przeszukałem forum, lecz nic nie znalazłem, może nie umiem szukać).
Mój kod poniżej.

package one;

import java.io.*;

public class Compare {
	
	public static void main(String[] args) {
		FileReader f1 = null;
		FileReader f2 = null;
		PrintWriter pw = null;
		
		try{
			f1 = new FileReader("I:\\Praktyka\\jeden.txt");
			f2 = new FileReader("I:\\Praktyka\\dwa.txt");
			pw = new PrintWriter("I:\\Praktyka\\out.txt");
			
			BufferedReader bf1 = new BufferedReader(f1);
			BufferedReader bf2 = new BufferedReader(f2);
			BufferedWriter bw = new BufferedWriter(pw);
			
			String str2;
			String str1;
			while ((str1 = bf1.readLine()) != null){
				while ((str2 = bf2.readLine()) != null){
					if (str1.equals(str2)){
						bw.write(str1);
						// bw.flush(); ?
					}
				}
			}
			bw.write("End");
			
		} catch (FileNotFoundException e){
			System.out.println("Couldn't open file " + e);
		} catch (IOException e) {
			System.out.println("Caught IO Exception");
		} finally {
			try {
				f1.close();
				f2.close();
				pw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

}

Za duplikaty przepraszam, jeżeli takowe są, lecz jedyne co znalazłem to : Porównanie stringów z dwóch plików tekstowych oraz Porównanie dwóch plików tekstowych, zwrot różnicy.

EDIT
Dodałem blok finally, a FileReadery i PrintWritera zadeklarowałem przed blokiem try ... catch.

1

Nie zamykasz strumieni. Dodaj blok finally, a w nim zamknij readery i writery metodą close.

1

Brakuje "close" i "flush" na końcu.

Ewentualnie pliki paradoksalnie mogą być różne, tzn.

  1. Jeden plik może mieć jakieś spacje na końcu lub początku - dorzuć "trim()" przy porównywaniu.
  2. Mogą też mieć różne kodowania - jeden może być odczytywany ze śmieciowymi znakami.

Najlepiej to sprawdź, czy w ogóle Ci wchodzi to do ifa wewnątrz.

Taka rada na przyszłość - jeśli masz takie zadania to staraj się korzystać z klasy Files i strumieni.

0
wartek01 napisał(a):

Brakuje "close" i "flush" na końcu.

Ciągle nie działa, zmieniłem kod w pierwszym poście.

wartek01 napisał(a):

Ewentualnie pliki paradoksalnie mogą być różne, tzn.

  1. Jeden plik może mieć jakieś spacje na końcu lub początku - dorzuć "trim()" przy porównywaniu.
  2. Mogą też mieć różne kodowania - jeden może być odczytywany ze śmieciowymi znakami.

Pliki wygenerowałem sam w celu debugowania (wziąłem pod uwagę, że może być coś nie tak z formatowaniem), kodowanie to samo.

wartek01 napisał(a):

Najlepiej to sprawdź, czy w ogóle Ci wchodzi to do ifa wewnątrz.

Spróbuję wykorzystać asercję.

wartek01 napisał(a):

Taka rada na przyszłość - jeśli masz takie zadania to staraj się korzystać z klasy Files i strumieni.

Są jakieś zasady dotyczące wyboru strumieni bajtowych i znaków?
Mam je opisane w kompendium Herberta Schildta, lecz nie bardzo zasady dobierania ich do odpowiednich scenariuszy. Dzięki wielkie za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1