Здравствуйте, пишу программу на JAVA по сортировке двух (отсортированных) файлов в один. Столкнулся с тем, что программа выводит неверный результат. Несколько раз переписывал программу с самого начала, но ничего не помогает. Сперва тестировал на массивах, программа работает отлично. А когда подключаю потоки для чтения и записи в файл, выходит неправильная сортировка. Помогите, голову уже сломал. В чем ошибка?
Вот код программы:import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
public class MergeS {
public static void main(String[] args) {
try {
FileReader fileReader1 = new FileReader("in11.txt");//Создает поток чтения и читает
FileReader fileReader2 = new FileReader("in22.txt");//Создает поток чтения и читает
BufferedReader bufferedReader1 = new BufferedReader(fileReader1); // Помещает прочитанное из fileReader1 в буфер bufferedReader1
BufferedReader bufferedReader2 = new BufferedReader(fileReader2); // Помещает прочитанное из fileReader2 в буфер bufferedReader2
String line1 = bufferedReader1.readLine(); // Читает строку из bufferedReader1 и присваивает ее line1
String line2 = bufferedReader2.readLine(); // Читает строку из bufferedReader2 и присваивает ее line2
FileWriter tmpFile = new FileWriter("out.txt", false); // Создает поток tmpFile для записи в файл
int whichFileToRead = 0;
boolean file_1_reader = true;
boolean file_2_reader = true;
while (file_1_reader || file_2_reader) {
if (file_1_reader == false) {
tmpFile.write(line2 + "\r\n");
whichFileToRead = 2;
System.out.println("Write : " + line2);
} else if (file_2_reader == false) {
tmpFile.write(line1 + "\r\n");
whichFileToRead = 1;
System.out.println("Write : " + line1);
} else {
String value1 = line1.substring(0); // получение символов из строки line1, и присваивает их value1
String value2 = line2.substring(0); // получение символов из строки line2, и присваивает их value2
System.out.print("Sort : " + value1 + " vs "+ value2 + " ");
int ans = value1.compareTo(value2); // сравнение двух значений value1 и value2 и присваивает это переменой ans
if (ans < 0) {
tmpFile.write(line1 + "\r\n");
whichFileToRead = 1;
System.out.println("Write : " + line1);
} else if (ans > 0) {
tmpFile.write(line2 + "\r\n");
whichFileToRead = 2;
System.out.println("Write : " + line2);
} else if (ans == 0) {
tmpFile.write(line1 + "\r\n");
whichFileToRead = 1;
System.out.println("Write : " + line1);
}
}
if (whichFileToRead == 1) {
line1 = bufferedReader1.readLine(); // Читает строку из буфера bufferedReader1 и присваивает line1
if (line1 == null)
file_1_reader = false; // Если line1 пустое, тогда file_1_reader присваивается значение false
} else {
line2 = bufferedReader2.readLine(); // Читает строку из буфера bufferedReader2 и присваивает line2
if (line2 == null)
file_2_reader = false; // Если line2 пустое, тогда file_2_reader присваивается значение false
}
}
tmpFile.close();
bufferedReader1.close();
bufferedReader2.close();
fileReader1.close();
fileReader2.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
Вот что записывается в файл out.txt :10
11
21
23
24
40
41
50
65
75
76
77
78
78
78
78
86
900
2100
2200
2300
2400
2500
98
101
190
1100
1200
3000
5000