Обогатим код функциональностью!

  • 6
  • Недоступна
Старая задача: вводится 2 имени файла, первый файл копируется на место, заданное вторым именем. Новая задача: вводится 2 имени файла, первый файл копируется на место, заданное вторым именем. Если файла, который нужно копировать, не существует, то программа об этом сообщает и еще раз читает имя файла с консоли, а уже потом считывает файл для записи.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (314)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Plunder9 уровень, Санкт-Петербург
4 часа назад
Арррр!!! Это было ужасно. Однако возможно. Наступило время подсказок. Ввод первого имени файла (String sourceFileName) и соответствующий поток (InputStream) оборачиваем в try. Потом в catch засовываем sout c нужным текстом и снова две предыдущие строки. После try-catch эти строки БОЛЬШЕ не повторяются. Дальше идут строки ввода имени второго файла, аналогичный ему поток и последующий код. Но это фигня. До этого вы, скорее всего, сами дошли. Но есть еще один важный нюанс — первый поток нужно объявить ДО блока try-catch, иначе он не будет читаться в последующем коде. В общем, без этой строки никуда:
InputStream fileInputStream;
Илья Мартынов10 уровень, Москва
вчера, 19:47
чет сделал сам не понял что. магия, блин
Leo16 уровень, Москва
вчера, 12:46
8 попыток благодаря непонятной логике валидатора, а точнее описание задачи. Решал многими способами, и всё отлично копировалось, но выскакивал пункт "Программа должна копировать содержимое первого файла во второй." и сообщение от 'Ментора' : "Проверьте, копируется ли правильно файл". Решил только с помощью комментов, спасибо люди)🙃
Алексей Чумаков15 уровень, Ногинск
пятница, 17:00
Существует ли файл мы можем проверить еще до вызова getOutputStream(), но условия задачи требуют обязательно отловить ексепшн из getOutputStream(). Поэтому вводим с клавы имя первого файла потом пытаемся получить InputStream и если ловим эксепшн снова вводим с клавы имя первого файла
Ярослав12 уровень, Москва
четверг, 10:20
Я конечно всё понимаю, но потоки на 9 уровне это мощно.
Алексей Чумаков15 уровень, Ногинск
пятница, 17:01
С ними еще на первых уровнях знакомили, когда Scanner и BufferdReader проходили
Ярослав12 уровень, Москва
позавчера, 13:31
По моему скромному мнению, это было никакое не знакомство с потоками, а демонстрация того, как их применить в конкретной ситуации - вводе данных с клавиатуры.
Алексей Чумаков15 уровень, Ногинск
позавчера, 13:35
Если не ошибаюсь там были примеры, в том числе и считывания с файла и в Общих чертах описывался InputStream и OutputStream.
Garadzienski15 уровень, Kraków
четверг, 09:25
Много попыток, а всё из-за одной глупости, что destinationFileName нужно считывать уже после try catch.
ezhilo35 уровень, Санкт-Петербург
15 мая, 15:48
Возникала ошибка Проверьте что при неправильном имени всё копируется куда надо. Трабл был в том что я 1) вводил 2 имени фала 2) если имя первого файла некорректно - просил ввести заново. Надо валидатору: 1) Ввели первое имя. Если оно некорректно - вводим заново 2) Ввели второе имя.
Анна10 уровень, Москва
17 мая, 19:12
Спасибо, помогли мне! Принято с 1 попытки :)
Vitalik10 уровень, Москва
вчера, 11:25
Самое забавное, что написано чёрным по белому " Программа вводит два имени файла.". В итоге сама задача поставлена некорректно, отсюда и большинство ошибок у студентов. Менторы..исправьте ошибку в задаче! Ваш коммент помог понять то, что нужно валидатору.
Alukard14 уровень, London
15 мая, 15:23
Всего эту задачу решили 30001 учеников. Я испортил красивую картинку =\
Анна10 уровень, Москва
17 мая, 19:12
За прошедшие двое суток её решили еще 45 человек, не густо как-то. Теперь 30046.
Alukard14 уровень, London
17 мая, 19:13
Соседям привет!✌🙃
Борис Скворцов11 уровень, Киев
пятница, 19:20
Спустя 5 дней уже 30168
Дима Шпак15 уровень, Москва
13 мая, 18:23
🤷‍♂️ Коротко о задаче " Программа вводит два имени файла. И копирует первый файл на место, заданное вторым именем.". То есть сразу вводит 2 файла? и если первый не верный то нужно еще раз ввести? Хм да вроде по условию так. Валидатор: Мужик , чет у тебя не так. Проверить , правильно ли копируются файлы. Я: Да все правильно копируется! Валидатор: Неа , не правильно. Я: Ну да , ну да . Надо сначала с первым файлом разобраться , а уже потом 2 вводить. Спасибо. Ах да. Я: пишу код
while (fileInputStream==null) {
    try {
        fileInputStream = getInputStream(sourceFileName);
    } catch (IOException e) {
        System.out.println("Файл не существует.");
        sourceFileName = reader.readLine();
    }
}
Валидатор: У тебя бесконечный цикл , проверь как все там. Я: Так ты введи хоть раз верный путь. Валидатор: Нет , бесконечный цикл , АТАШОЛ.
Вадим14 уровень, Саранск
11 мая, 16:17
Ненавижу потоки... Мы считываем имя файла, который нужно копировать. Создаем объект этого файла, передав в параметр имя/адрес. Если файла с таким именем не существует, выбрасывает исключение. Мы его обрабатываем (try-catch), в блоке catch выводим строку на консоль и по новой считываем имя файла...??????????????? Я не понял вот тут!!! Мы по новой считываем имя этого файла??? Зачем? Уже выбросило исключение с этим именем. Такого файла не существует. Зачем его еще раз считывать? Или мы уже читаем имя какого-то другого файла? Если другого, то нам опять нужно создание объекта файла обрабатывать, там тоже исключение может бросить... Кто-то сможет объяснить?
Сергей10 уровень
13 мая, 09:06
Считываем файл, его нет. Снова считываем уже новый файл. Типа может быть в первый раз ошибку в пути допустили или имени файла. И это только 2 раза. Если рекурсию делать до тех пор пока не будет файл, который возможно считать, то валидатор ошибку выдаёт. Мол надо только два раза считать. Надеюсь смог сформулировать.
Igor12 уровень, Москва
четверг, 14:51
"то программа должна вывести надпись "Файл не существует." и еще один раз прочитать имя файла с консоли" В задании написано, еще раз считать имя с консоли. А не просто еще раз считанную строку туда засунуть.