Не могу понять, почему не проходит условие.
Попробовал отдельно игнорировать пустые строки (через проверку прочитанной строки isEmpty() перед добавлением в список прочитанных) - не помогло.
Было:
while (reader.ready()) {
stringList.add(reader.readLine());
}
Сейчас в коде:
String line;
while (reader.ready()) {
if (!((line = reader.readLine()).isEmpty()))
stringList.add(line);
}
Без этой проверки тоже не проходило то же условие.
Валидатор говорит дословно "Убедись, что метод getFileContent возвращает полностью весь вычитанный контент, а не его часть". (Заметить такое поведение при проверке на локальных файлах не удалось). Также join() стоит сразу после start(), что убирает вероятность того, что файл "не успевает" прочитаться и присвоить полю новое значение или что-то в этом роде.
В правильном решении лепится лишний пробел в конце всех строк - добавление пробела в конце также не позволило пройти условие.
Также в правильном решении проверка в цикле идет не через ready() потока, а через проверку считанной строки из reader !=null.
String line;
while ((line = reader.readLine())!=null) {
stringList.add(line);
}
Смена проверки не позволила пройти условие.
Из незначительных отличий - там используется try-with-resources, а также явное += считанной строки к полю(что странно, если нас не интересуют промежуточные состояния чтения из файла, а также создает много строк в памяти), но это не должно влиять на результат - возвращаемое содержимое файл.
Если кто-то поможет разобраться, почему моё решение и его варианты не засчитываются - буду благодарен.package com.javarush.task.task16.task1630;
import java.io.*;
import java.util.ArrayList;
/*
Последовательный вывод файлов
*/
public class Solution {
public static String firstFileName;
public static String secondFileName;
static {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
firstFileName = reader.readLine();
secondFileName = reader.readLine();
reader.close();
} catch (IOException e) {}
}
public static void main(String[] args) throws InterruptedException {
systemOutPrintln(firstFileName);
systemOutPrintln(secondFileName);
}
public static void systemOutPrintln(String fileName) throws InterruptedException {
ReadFileInterface f = new ReadFileThread();
f.setFileName(fileName);
f.start();
f.join();
System.out.println(f.getFileContent());
}
public static class ReadFileThread extends Thread implements ReadFileInterface {
String filename;
String content = "";
@Override
public void setFileName(String fullFileName) {
this.filename = fullFileName;
}
@Override
public String getFileContent() {
return content;
}
@Override
public void start() {
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
ArrayList<String> stringList = new ArrayList<String>();
String line;
while ((line = reader.readLine())!=null) {
stringList.add(line);
}
content = String.join(" ", stringList);
reader.close();
} catch (IOException e) {}
}
}
public interface ReadFileInterface {
void setFileName(String fullFileName);
String getFileContent();
void join() throws InterruptedException;
void start();
}
//напишите тут ваш код
}