1. Разберись, что делает программа.
2. В статическом блоке считай 2 имени файла firstFileName и secondFileName.
3. Внутри класса Solution создай нить public static ReadFileThread, которая реализует
интерфейс ReadFileInterface (Подумай, что больше подходит - Thread или Runnable).
3.1. Метод setFileNa
Последовательный вывод файлов
- 18
Недоступна
Комментарии (403)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Maxim
31 мая, 07:25
Что-то многопоточка здесь мне не заходит. Скопировал решение по этой задаче. Оставлю это здесь:
![]()

0
comrade_b
29 мая, 13:08
Я удивляюсь конечно тому, что так мало комментов про переопределение метода старт. У меня как раз был затык с этим. Не нашел ничего лучше, как и пару комментаторов ниже, чем просто в методе старт при переопределении вызвать this.run()
И все заработало.
0
Дмитрий Щебрюк
22 мая, 03:51
Я расстроен.
1. Валидатор требует вещи, которые не были прописаны в условии. (getFileContent() должен возвращать значение "" даже без запуска нити)
2. Валидатор не может в Path.of
0
milyasow
20 мая, 11:44
Так и не понял, зачем
поместили в конце класса Solution.
0
Yakov Bashkurov
21 июня, 10:20
там класс прописать надо
0
Юрий
18 мая, 07:13
Валидатор - успешно, а по факту решение на работает:
j:\2.txt
j:\1.txt
запуск метода run
метод run выполнен
ddd eee fff
запуск метода run
java.io.FileNotFoundException:
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at com.javarush.task.task16.task1630.Solution$ReadFileThread.run(Solution.java:83)
0
milyasow
20 мая, 11:39
При валидации ничего не вводится, соответственно, у валидатора могут быть какие-то свои два файла для проверки, поэтому FNF Exception не выбрасывается.
0
Роман
12 мая, 22:33
У задачи просто конченный валидатор.
15 минут кодинга и час войны с валидатором уже даже по готовому решению чисто из принципа найти, что же ему "не так".
Оказывается, через консоль надо было вводить полный путь до файла с именем, а не просто его имя! При этом валидатор упорно тыкал меня в 5 и 7 пункты требований.
0
Эльдар
13 мая, 20:18
ты задачу 16 уровня решал,находясь на 27?
0
Роман
13 мая, 20:26
Я не пропускал уровни, для кого-то это 16 лвл, для других - 26. Говорят, есть распределяющий тест при старте обучения, по результатам которого тебя может на старте закинуть сразу на + 10 уровней вверх.
+1
milyasow
20 мая, 11:41
При валидации же ничего не вводится?
0
milyasow
20 мая, 12:17
Этот код делает тоже самое, что и в решении, только там через BufferedReader, здесь через Scanner. Но у меня другой вопрос:
Как это связано с прохождением валидатора?
0
Роман
20 мая, 12:27
Изначально я вводил в консоль только имя файла по типу "testFile.txt" и далее по ходу программы прилеплял к началу строки с этим именем файла полный путь до него, чтобы получилось условно "C:\Users\Desktop\testFile.txt" - валидатор такое решение не принимал, только напрямую об этом он не писал, просто ссылаясь на невыполнение 5 и 7 пунктов проверки.
Валидатор пропустил решение без вышеописанных костылей с вводом в консоль сразу полного пути до файла с его именем - "C:\Users\Desktop\testFile.txt".
0
milyasow
20 мая, 12:38
А ну понятно. Сервер же на Linux, поэтому пути вида "C:\Users\Desktop\..." у него в принципе быть не может, и такое решение он не примет.
А если поток принимает полный ввод, то валидатор подставляет туда что-то типа "/home/user/task/testfile.txt" и все работает.
0
Роман
20 мая, 12:48
Изначально проблема вот в этом условии:
"2. В статическом блоке считай 2 имени файла firstFileName и secondFileName."
Написали бы, что надо считать полное имя файла - куда понятнее.
0
Alex Karpov
21 июня, 17:43
У меня был затык скорее в том, что я хотел в переменные сохранить ИМЯ ФАЙЛА, как и написано в условии, а не ПУТЬ К ФАЙЛУ. Даже эта приписка ПОЛНОЕ имя файла тут не помогла. Какая разница. Путь к файлу не равен полному имени файла один фиг.
Ведь полное имя файла по пути C:\temp\a.txt - это a.txt
0
Anonymous #3036451
29 апреля, 09:45
Смотришь на интерфейс ReadFileInterface и думаешь: "Поскольку в фунцию systemOutPrintln вмешиваться нельзя (там нет блока про вставку кода), надо переопеределить функцию start(), чтобы она сразу join'илась и не давала запуститься другому потоку, пока не завершен этот. Какая интересная задача! Какие авторы молодцы что показывают такую возможность".
Рождается решение:
А по итогу все банально и просто 😬 Они просто забыли вставить "//напишите тут ваш код" в функцию systemOutPrintln. 0
Олег
27 апреля, 11:25
А почему без Join вообще не выводит? Типа потоки не могут решить кому работать с объектом f ?
0
milyasow
20 мая, 11:49
Типа потому что сразу после start() идет System.out.println(f.getFileContent()), в которой ничего не будет, пока не закончит работу основной метод потока, ведь именно run() занимается добычей информации из файла. И чтобы дать потоку спокойно закончить свою работу перед следующей инструкцией - нужен join().
0
Eugene
3 апреля, 17:12
Спасибо большое комментаторам!!!
0
Лик Вадим
7 марта, 10:51
Реально достала ситуация когда стремишься найти решение посредством инструментов, дающихся на этом ресурсе как новые, а значит "наиболее верные пути решения задач" и при этом получаешь на кусок такого (работающего) кода :
List<String> list = Files.readAllLines(Path.of(fullFileName));
Ошибку компиляции : Ошибка в файле com/javarush/task/task16/task1630/Solution.java в строке : 73
Не найден метод "of(java.lang.String)" в интерфейсе "java.nio.file.Path"
Понятно что когда создавалась эта задача, компилятор еще не знал что такое Path.of, но как по мне - давно пора внести изменения в логику его работы, а то так и будем решать не как следует сегодня, а как в "прошлом веке" заведено было.
+4
SWK
30 марта, 15:24
Уважаемый, если вы уже знаете, как следует решать, зачем вы, вообще, отвлекаетесь на эти задачи?
Мне вот совершенно понятно, что о readAllLines и Path.of "на этом ресурсе" к моменту решения этой задачи ещё ничего обучающимся не рассказывали. И с какого их применять?
0
Лик Вадим
30 марта, 16:28
А вот мне совершенно понятно что на момент решения этой задачи я материал о readAllLines и Path.of "на этом ресурсе" проходил еще на изучении квеста Java Syntax Zero, а именно на 16-ом его уровне, 6-ой лекции, которая называется "Работа с файлами в Java". Посмотрите ее и найдете там описание метода readAllLines класса Files. В этой же лекции в ее 5-ом разделе , Вы можете найти и информацию о работе с содержимым файла через Path.of
+4
Viktar
1 апреля, 07:56
Да, та же история, почитал про работу с файлами в Java, сделал через Path.of, все работает, но валидатор выдает ошибку компиляции. Переделаю через FileReader. И еще долго не мог понять что прописать в методе setFileName, перечитывал статьи про сеттеры.
+3
SWK
4 апреля, 05:29
Удивительно, я сейчас на 7м уровне Java Core, а задачу, о которой вы спрашиваете на 16м уже решил. Тут одно из 2х:
- Или с курсом что-то не так.
- Или кому-то следовало заняться соответствующей задачей в соответствующее время.
Может, на 33м уровне - поздновато?
Кстати, очень жаль, что мы так и не узнали, зачем вы, вообще, отвлекаетесь на эти задачи, если уже знаете, как следует решать, ?
0
Лик Вадим
7 апреля, 07:07
Мой текущий уровень - 33.Верно.Задачу о которой мы говорим я решал на том же уровне, который ей соответствует. В моем случае полное прохождение курса Java Syntax Zero соответствует 20-ти уровням. Плюс еще 6 уровней курса Java Core что бы дойти до этой задачи. Итого что бы дойти до открытия этой задачи я должен был получить 26-ой уровень. То что Вы ее решали на 16-ом уровне а не на 26-ом, говорит о том что Вы начали изучать JavaRush раньше меня, до того как проект изменил содержание курса Java Syntax. В вашем случае он составляет 10 уровней, в моем 20.Это всего лишь цифры. Но даже если бы это было не так - раздавать рекомендации что, когда и как кому то изучать/решать, когда Вас об этом никто не спрашивал - дурной моветон.
+3
SWK
7 апреля, 08:31
"Дурной моветон" - тавтология по схеме "нехороший негодяй".
До вас ещё не дошло, что если мне недоступен этот самый Java Syntax Zero, я не могу "посмотреть задачу на 16-ом его уровне, 6-ой лекции"? И много кто тоже не может. Соответственно, для нас, таких, ваши рассуждения о "передовых методах" - пустая болтовня, ибо мы их тупо не видели.
Моветон или дурной тон - рассказывать, что вас "достало" и как нужно настраивать компилятор. Если вы знаете это лучше, вам тут нечему учиться.
Как и раньше, очень жаль, что мы так и не узнали, зачем вы, вообще, отвлекаетесь на эти задачи, если уже знаете, как следует их решать.
0
Лик Вадим
7 апреля, 12:14
Да определюсь я как нибудь сам есть мне тут чему учиться или нет. Равно как и комментировать задачи я буду без учета того что и как Вы проходили. Если Вам что то не нравится или не понятно в моих комментариях - у Вас есть замечательная возможность шагать мимо. Убедительно прошу ею воспользоваться-)
+3
SWK
7 апреля, 16:25
Да и я как-нибудь проживу без необходимости пропускать информацию о том, что и как вас достало. Если, вдруг, вам хватит ума не выставлять вашу капризность на всеобщее обозрение.
А комментировать я буду что захочу и куда мне шагать определюсь сам.
Кстати, с прискорбием констатирую, что мы так и не узнали, зачем вы, вообще, отвлекаетесь на эти задачи, если уже знаете, как следует их решать.
0
milyasow
20 мая, 12:04
Удивительно токсичный персонаж. Протупил на этапе выбора сценария квеста, и теперь не упускает случая всем показать, как он обижен на администрацию JR и всех остальных пользователей, у которых все получается. При этом уверен, что это они все виноваты. 😑
+4
🦔 Виктор веду учебный тг-канал в t.me/Javangelion Expert
20 мая, 16:08
Солидарен. Запредельно токсичный персонаж-обиженка. Обходите стороной и не наступайте в эту лужу слёз.
+4