Последовательный вывод файлов

  • 18
  • Недоступна
1. Разберись, что делает программа. 2. В статическом блоке считай 2 имени файла firstFileName и secondFileName. 3. Внутри класса Solution создай нить public static ReadFileThread, которая реализует интерфейс ReadFileInterface (Подумай, что больше подходит - Thread или Runnable). 3.1. Метод setFileNa
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (403)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Maxim
Уровень 23, Саратов, Russian Federation
31 мая, 07:25
Что-то многопоточка здесь мне не заходит. Скопировал решение по этой задаче. Оставлю это здесь:
comrade_b
Уровень 26, Амстердам, Нидерланды
29 мая, 13:08
Я удивляюсь конечно тому, что так мало комментов про переопределение метода старт. У меня как раз был затык с этим. Не нашел ничего лучше, как и пару комментаторов ниже, чем просто в методе старт при переопределении вызвать this.run() И все заработало.
Дмитрий Щебрюк
Уровень 23, Москва, Russian Federation
22 мая, 03:51
Я расстроен. 1. Валидатор требует вещи, которые не были прописаны в условии. (getFileContent() должен возвращать значение "" даже без запуска нити) 2. Валидатор не может в Path.of
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 11:44
Так и не понял, зачем
//напишите тут ваш код
поместили в конце класса Solution.
Yakov Bashkurov
Уровень 17, Тобольск, Россия
21 июня, 10:20
там класс прописать надо
Юрий
Уровень 16, Новосибирск, Russian Federation
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)
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 11:39
При валидации ничего не вводится, соответственно, у валидатора могут быть какие-то свои два файла для проверки, поэтому FNF Exception не выбрасывается.
Роман
Уровень 37, Москва, Россия
12 мая, 22:33
У задачи просто конченный валидатор. 15 минут кодинга и час войны с валидатором уже даже по готовому решению чисто из принципа найти, что же ему "не так". Оказывается, через консоль надо было вводить полный путь до файла с именем, а не просто его имя! При этом валидатор упорно тыкал меня в 5 и 7 пункты требований.
Эльдар
Уровень 17, Ростов-на-дону
13 мая, 20:18
ты задачу 16 уровня решал,находясь на 27?
Роман
Уровень 37, Москва, Россия
13 мая, 20:26
Я не пропускал уровни, для кого-то это 16 лвл, для других - 26. Говорят, есть распределяющий тест при старте обучения, по результатам которого тебя может на старте закинуть сразу на + 10 уровней вверх.
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 11:41
При валидации же ничего не вводится?
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 12:17
Этот код делает тоже самое, что и в решении, только там через BufferedReader, здесь через Scanner. Но у меня другой вопрос:
Оказывается, через консоль надо было вводить полный путь до файла с именем, а не просто его имя!
Как это связано с прохождением валидатора?
Роман
Уровень 37, Москва, Россия
20 мая, 12:27
Изначально я вводил в консоль только имя файла по типу "testFile.txt" и далее по ходу программы прилеплял к началу строки с этим именем файла полный путь до него, чтобы получилось условно "C:\Users\Desktop\testFile.txt" - валидатор такое решение не принимал, только напрямую об этом он не писал, просто ссылаясь на невыполнение 5 и 7 пунктов проверки. Валидатор пропустил решение без вышеописанных костылей с вводом в консоль сразу полного пути до файла с его именем - "C:\Users\Desktop\testFile.txt".
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 12:38
А ну понятно. Сервер же на Linux, поэтому пути вида "C:\Users\Desktop\..." у него в принципе быть не может, и такое решение он не примет. А если поток принимает полный ввод, то валидатор подставляет туда что-то типа "/home/user/task/testfile.txt" и все работает.
Роман
Уровень 37, Москва, Россия
20 мая, 12:48
Изначально проблема вот в этом условии: "2. В статическом блоке считай 2 имени файла firstFileName и secondFileName." Написали бы, что надо считать полное имя файла - куда понятнее.
Alex Karpov
Уровень 27, Russian Federation
21 июня, 17:43
У меня был затык скорее в том, что я хотел в переменные сохранить ИМЯ ФАЙЛА, как и написано в условии, а не ПУТЬ К ФАЙЛУ. Даже эта приписка ПОЛНОЕ имя файла тут не помогла. Какая разница. Путь к файлу не равен полному имени файла один фиг. Ведь полное имя файла по пути C:\temp\a.txt - это a.txt
Anonymous #3036451
Уровень 27, Falls Church, United States
29 апреля, 09:45
Смотришь на интерфейс ReadFileInterface и думаешь: "Поскольку в фунцию systemOutPrintln вмешиваться нельзя (там нет блока про вставку кода), надо переопеределить функцию start(), чтобы она сразу join'илась и не давала запуститься другому потоку, пока не завершен этот. Какая интересная задача! Какие авторы молодцы что показывают такую возможность". Рождается решение:
@Override
public synchronized void start() {
    super.start();
    try {
        this.join();
    } catch (InterruptedException e) {
        return;
    }
}
А по итогу все банально и просто 😬 Они просто забыли вставить "//напишите тут ваш код" в функцию systemOutPrintln.
Олег
Уровень 32, Москва, Russian Federation
27 апреля, 11:25
А почему без Join вообще не выводит? Типа потоки не могут решить кому работать с объектом f ?
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 11:49
Типа потому что сразу после start() идет System.out.println(f.getFileContent()), в которой ничего не будет, пока не закончит работу основной метод потока, ведь именно run() занимается добычей информации из файла. И чтобы дать потоку спокойно закончить свою работу перед следующей инструкцией - нужен join().
Eugene
Уровень 26, Ростов-на-Дону, Россия
3 апреля, 17:12
Спасибо большое комментаторам!!!
Лик Вадим
Уровень 35, Москва, Russian Federation
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, но как по мне - давно пора внести изменения в логику его работы, а то так и будем решать не как следует сегодня, а как в "прошлом веке" заведено было.
SWK
Уровень 16
30 марта, 15:24
Уважаемый, если вы уже знаете, как следует решать, зачем вы, вообще, отвлекаетесь на эти задачи? Мне вот совершенно понятно, что о readAllLines и Path.of "на этом ресурсе" к моменту решения этой задачи ещё ничего обучающимся не рассказывали. И с какого их применять?
Лик Вадим
Уровень 35, Москва, Russian Federation
30 марта, 16:28
А вот мне совершенно понятно что на момент решения этой задачи я материал о readAllLines и Path.of "на этом ресурсе" проходил еще на изучении квеста Java Syntax Zero, а именно на 16-ом его уровне, 6-ой лекции, которая называется "Работа с файлами в Java". Посмотрите ее и найдете там описание метода readAllLines класса Files. В этой же лекции в ее 5-ом разделе , Вы можете найти и информацию о работе с содержимым файла через Path.of
Viktar
Уровень 18, Strzelce Opolskie , Poland
1 апреля, 07:56
Да, та же история, почитал про работу с файлами в Java, сделал через Path.of, все работает, но валидатор выдает ошибку компиляции. Переделаю через FileReader. И еще долго не мог понять что прописать в методе setFileName, перечитывал статьи про сеттеры.
SWK
Уровень 16
4 апреля, 05:29
Удивительно, я сейчас на 7м уровне Java Core, а задачу, о которой вы спрашиваете на 16м уже решил. Тут одно из 2х: - Или с курсом что-то не так. - Или кому-то следовало заняться соответствующей задачей в соответствующее время. Может, на 33м уровне - поздновато? Кстати, очень жаль, что мы так и не узнали, зачем вы, вообще, отвлекаетесь на эти задачи, если уже знаете, как следует решать, ?
Лик Вадим
Уровень 35, Москва, Russian Federation
7 апреля, 07:07
Мой текущий уровень - 33.Верно.Задачу о которой мы говорим я решал на том же уровне, который ей соответствует. В моем случае полное прохождение курса Java Syntax Zero соответствует 20-ти уровням. Плюс еще 6 уровней курса Java Core что бы дойти до этой задачи. Итого что бы дойти до открытия этой задачи я должен был получить 26-ой уровень. То что Вы ее решали на 16-ом уровне а не на 26-ом, говорит о том что Вы начали изучать JavaRush раньше меня, до того как проект изменил содержание курса Java Syntax. В вашем случае он составляет 10 уровней, в моем 20.Это всего лишь цифры. Но даже если бы это было не так - раздавать рекомендации что, когда и как кому то изучать/решать, когда Вас об этом никто не спрашивал - дурной моветон.
SWK
Уровень 16
7 апреля, 08:31
"Дурной моветон" - тавтология по схеме "нехороший негодяй". До вас ещё не дошло, что если мне недоступен этот самый Java Syntax Zero, я не могу "посмотреть задачу на 16-ом его уровне, 6-ой лекции"? И много кто тоже не может. Соответственно, для нас, таких, ваши рассуждения о "передовых методах" - пустая болтовня, ибо мы их тупо не видели. Моветон или дурной тон - рассказывать, что вас "достало" и как нужно настраивать компилятор. Если вы знаете это лучше, вам тут нечему учиться. Как и раньше, очень жаль, что мы так и не узнали, зачем вы, вообще, отвлекаетесь на эти задачи, если уже знаете, как следует их решать.
Лик Вадим
Уровень 35, Москва, Russian Federation
7 апреля, 12:14
Да определюсь я как нибудь сам есть мне тут чему учиться или нет. Равно как и комментировать задачи я буду без учета того что и как Вы проходили. Если Вам что то не нравится или не понятно в моих комментариях - у Вас есть замечательная возможность шагать мимо. Убедительно прошу ею воспользоваться-)
SWK
Уровень 16
7 апреля, 16:25
Да и я как-нибудь проживу без необходимости пропускать информацию о том, что и как вас достало. Если, вдруг, вам хватит ума не выставлять вашу капризность на всеобщее обозрение. А комментировать я буду что захочу и куда мне шагать определюсь сам. Кстати, с прискорбием констатирую, что мы так и не узнали, зачем вы, вообще, отвлекаетесь на эти задачи, если уже знаете, как следует их решать.
milyasow
Уровень 30, Москва, Russian Federation
20 мая, 12:04
Удивительно токсичный персонаж. Протупил на этапе выбора сценария квеста, и теперь не упускает случая всем показать, как он обижен на администрацию JR и всех остальных пользователей, у которых все получается. При этом уверен, что это они все виноваты. 😑
🦔 Виктор веду учебный тг-канал в t.me/Javangelion Expert
20 мая, 16:08
Солидарен. Запредельно токсичный персонаж-обиженка. Обходите стороной и не наступайте в эту лужу слёз.