EDIT!Повторить.
Хорошо, поэтому для одновременного использования 100 строк необходимо проверить наличие нулевого значения, в противном случае попытка записи нулевого значения в файл может привести к ошибкам.
Вы проверяете, является ли файлв конце один раз, а затем собирать еще 99 кусочков информации без проверки на ноль.
Что если при вызове этой строки:
while((line2 = reader2.readLine()) != null)
в файле остается только 1 строка?Затем ваш массив памяти содержит 99 экземпляров null, и вы пытаетесь записать null в файл 99 раз.Это худший сценарий.
Я действительно не знаю, какую помощь мы должны оказать людям, которые ищут помощь в выполнении домашних заданий, на большинстве знакомых мне сайтов это даже не разрешено.
здесь приведен пример одного из способов записи первого файла.
String line1 = reader1.readLine();
boolean end_of_file1 = false;
while(!end_of_file)
{
for (int i = 0; i < memorySize)
{
memory[i] = line1;
i++;
if(i < memorySize)
{
if((line1 = reader1.readLine()) == null)
{
end_of_file1 = true;
}
}
}
for (int i = 0; i < memorySize; i++)
{
if(!memory[i] == null)
{
writer.write(memory[i]);
writer.newLine();
numberOfLinesFile1++;
}
}
}
reader1.close();
как только вы это сделаете, чтобы упростить проверку копий, сделайте общедоступный статический логический тип, который проверяет файл на его наличие, затем выМожно вызвать это, это сделает код более чистым.
public static boolean isUsed(String f1, String item, int dist)
{
BufferedReader buff1 = new BufferedReader(new FileReader(f1));
for(int i = 0;i<dist;i++)
{
String line = buff1.readLine()
if(line == null){
return false;
}
if(line.equals(item))
{
return true;
}
}
return false;
}
Затем используйте тот же метод, что и для записи файла 1, только перед написанием каждой строки проверьте, не является ли! isUsed ()
boolean end_of_file2 = false;
memory = new String[memorySize];// Reset the memory, erase old data from file1
int numberOfLinesFile2=0;
String line2 = reader2.readLine();
while(!end_of_file2)
{
for (int i = 0; i < memorySize; )
{
memory[i] = line2;
i++;
if(i < memorySize)
{
if((line2 = reader2.readLine()) == null)
{
end_of_file2 = true;
}
}
}
for (int i = 0; i < memorySize; i++)
{
if(!memory[i] == null)
{
//Check is current item was used in file 1.
if(!isUsed(file1, memory[i], numberOfLinesFile1)){//If not used already
writer.write(memory[i]);
writer.newLine();
numberOfLinesFile2++;
}
}
}
}
reader2.close();
writer.close();
Надеюсь, это поможет.Заметьте, что я не предоставляю полный код, потому что я узнал, что простое вставление кода увеличит вероятность того, что при копировании и вставке будет использоваться код без его понимания.Я надеюсь, что вы найдете это полезным.