Разделение файла

  • 10
  • Недоступна
Считать с консоли три имени файла: файл1, файл2, файл3. Разделить файл1 по следующему критерию: Первую половину байт записать в файл2, вторую половину байт записать в файл3. Если в файл1 количество байт нечетное, то файл2 должен содержать бОльшую часть. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (218)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
marat20 уровень, Ростов-на-Дону
вчера, 10:52
Какая-то чепуха. Ругалась говорила что 3-ю и 4-ю строчку не выполнил. Хотя файлики резала нормально Удалил комментарий с русскими буквами и все Ок. Перепроверить уже не получается. Может просто глюк.
Андрей22 уровень, Москва
14 февраля, 10:37
ВНИМАНИЕ ДЛЯ ЛИНУКСОИДОВ: запишите в файл руками в редакторе 5 байт, сохраните файл, после чего проверьте, сколько байт возвращает available(). После чего повторите то же самое, c файлом с таким же содержанием, созданным посредством write
Alexey Prilessky18 уровень, Минск
13 февраля, 18:56
Валидатор отказывает, если для записи в 2 файла используется один и тот же FileOutputStream, который перенаправляется с одного файла на другой. Ему надо именно чтоб для каждого файла был свой FileOutputStream
11 февраля, 07:34
я вам больше скажу: даже округлять не надо, просто делим на 2, при условии, что делим нечетное если последовательно выполнить - работает.
while (fileIn.available()>fileSize/2){
...
}
while (fileIn.available()>0){
...
}
Дмитрий Щетинин23 уровень, Воронеж
9 января, 16:20
с 7 попыток! Чувствую себя идиотом(
Гофф19 уровень
5 января, 22:45
Просто оставлю это здесь:
int cut = fileSize/2 + (fileSize&1);
ondutytoday22 уровень, Самара
25 января, 11:59
а можете объяснить как работает (fileSize&1)? Просто ни разу не встречала такой записи
Гофф19 уровень
25 января, 12:07
fileSize&1 равно нулю, если fileSize чётный и равно единице, если не чётный. Посмотрите, плиз, вот здесь, я там позавчера объяснял, как работает оператор &.
Гофф19 уровень
25 января, 12:14
Грубо говоря, x & 1 даёт значение младшего бита в двоичном представлении x, а это 0 для чётных и 1 для нечётных.
Sergey20 уровень, Pattaya
1 февраля, 18:57
вполне достаточно int cut = fileSize - fileSize/2;
Гофф19 уровень
1 февраля, 20:42
О! Красиво!
Гофф19 уровень
5 февраля, 15:48
Можно так, можно этак. С переменной ты занимаешь чуть больше памяти, но вычисляешь значение один раз. Без переменной ты как бы память не занимаешь (на самом деле занимаешь ещё больше, потому что программный код тоже в памяти хранятся), но при этом одно и тоже значение приходится вычислять по нескольку раз. В данном случае - трижды, плюс сравнение в ифе - в 4 раза вычислений больше.
y-grek18 уровень, Киев
6 февраля, 20:11
согласен
Игорь Кучер28 уровень, Днепр
28 декабря 2019, 14:28
Посидел, порешал. Аж самому понравилось. Только прокололся на условии, что во второй файл нужно больше байт записывать, чем в третий
Alex22 уровень, Санкт-Петербург
25 декабря 2019, 15:46
Ещё одна задача, заработавшая мой дизлайк (( Изначально решил побайтовым считываем и записью в файлы (до половины в один, после половины в другой). Валидатор ругался хотя вывод в файлы соответствовал условию. По всей видимости валидатору принципиально решение через write(byte[], off, len).
Игорь Кучер28 уровень, Днепр
28 декабря 2019, 14:26
Я бы тоже ругался над таким решением. Может вы ещё BufferedReader'ом брезгуете, читая посимвольно?
steff20 уровень, Воронеж
12 декабря 2019, 11:42
Обрадовался что легко написал, и все работает, файл делится, не зря еще вчера читал Шилдта по этой теме, но не тут то было. При проверке нарвался вот на что: - не проходит если определяю размер буфера так: file1.length() - все хорошо если так: inputStream.available() Буфер у меня один и читаю файл целиком. Какие мысли?
Dmitry18 уровень
13 декабря 2019, 05:34
Мысли такие: поменьше нужно читать Шилдта =)
Сергей23 уровень, Минск
6 декабря 2019, 16:33
5 тадий гнева