JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/помогите други мои , не могу понять как в файлы записат...
Антон Никифоров
29 уровень
  • 23.11.2022
  • 342просмотров
  • 8комментариев

помогите други мои , не могу понять как в файлы записать именно байты ?, метод write записывает только сами значения

Вопрос по задаче Разделение файла
Java Core,  8 уровень,  5 лекция
Обсуждается


Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать большую часть.
Закрыть потоки.

Требования:
  • Программа должна три раза считать имена файлов с консоли.
  • Для чтения из файла используй поток FileInputStream, для записи в файлы - FileOutputStream
  • Первую половину байт из первого файла нужно записать во второй файл.
  • Вторую половину байт из первого файла нужно записать в третий файл.
  • Потоки FileInputStream и FileOutputStream должны быть закрыты.
....
package com.javarush.task.task18.task1808; import java.io.*; import java.util.ArrayList; public class Solution { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String fail1 = reader.readLine(); String fail2 = reader.readLine(); String fail3 = reader.readLine(); FileInputStream fileInputStream1 = new FileInputStream(fail1); FileOutputStream fileOutputStream2 = new FileOutputStream(fail2); FileOutputStream fileOutputStream3 = new FileOutputStream(fail3); int count = fileInputStream1.available(); //C:/Users/Public/3.txt int count2 = (count / 2); int s = 0; while (fileInputStream1.available() > 0) { byte a = (byte) fileInputStream1.read(); // 7654321- ñåìü öèôð â 1 ôàéëå. count / 2=3;int schetchic = 0; //0<=3 äîá â ôàé ¹1-7-êó. schetchic++; if (s <= count2) { //1<=3 äîá â ôàé ¹1-6-êó. schetchic++; //System.out.println(s); // /2<=3 äîá â ôàé ¹1-5-êó. schetchic++; fileOutputStream2.write(a); //3<=3 äîá â ôàé ¹1-4-êó. schetchic++; s++; } else if (s > count2) { s++; fileOutputStream3.write(a); } } reader.close(); //ÂÑÅ ÏÎÒÎÊÈ ÇÀÊÐÛÒÛ !!! ÏÎ×ÅÌÓ ÂÛÄÀÅÒ ÎØÈÁÊÈ!!!! fileInputStream1.close(); fileOutputStream2.close(); fileOutputStream3.close(); }}
0
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Владимир
Уровень 30
24 ноября 2022, 13:13
1) Прочитайте официальную документацию методов read() и write() и разберитесь как они работают. package java.io 2) Внимательно перечитайте условие: "Если в файл1 количество байт нечетное, то файл2 должен содержать бОльшую часть."
0
Антон Никифоров
Уровень 29
27 ноября 2022, 11:51
в файле 1 (семь букв(poiutre)). После компеляции в файле 2(poiu), в файле 3(tre). Значит логика правильная. Я так понимаю что валидатор не пропускает так как там должны быть не буквы а цифры (байты которые соответствуют этим буквам). так как метод write(int c); выводит int; а с этим методом void write(byte[] buff, int from, int count);у меня что то не получается. Понять не могу почему??
0
Антон Никифоров
Уровень 29
27 ноября 2022, 13:07
ВСЕМ ОГРОМНОЕ СПАСИБО!!! решил способом указанным ниже воспользовался советами из этой ссылке https://javarush.com/help/84893 НО ПОНЯТЬ НЕ МОГУ В ФАЙЛАХ АУТПУТ У МЕНЯ БЫЛ ТАКОЙ ЖЕ ГДЕ ОШИБКА ПОНЯТЬ ТАК И НЕ ПОНЯЛ!!! int count = fileInputStream1.available(); //C:/Users/Public/3.txt byte[] buffer = new byte[count]; int VxodnoiPotok= fileInputStream1.read(buffer); int firstFileLenght = (count/2)+count%2; fileOutputStream2.write(buffer,0,firstFileLenght); fileOutputStream3.write(buffer,firstFileLenght,(VxodnoiPotok-firstFileLenght)); reader.close(); fileInputStream1.close(); fileOutputStream2.close(); fileOutputStream3.close();
0
Владимир
Уровень 30
27 ноября 2022, 16:16
А Вы разобрались, как работают методы read() и write()? В первоначальном варианте вы оперируете количеством байт исходя из оценки available() до прочтения (которая кстати не всегда точная). Во втором варианте уже используете фактическое количество прочитанных байт: int VxodnoiPotok= fileInputStream1.read(buffer); Что и требовалось в этой задаче. P.S. Если вывод в консоль совпадает с "правильным решением" - это еще не значит, что логика правильная (с точки зрения правильной логики этого не достаточно). Надеюсь, что сейчас вы в этом убедились
0
Антон Никифоров
Уровень 29
30 ноября 2022, 11:46
Огромное спасибо
0
Павелстудент на стероидах в Java Syntax Pro beta
23 ноября 2022, 19:38
Можно просто убрать преобразование в байты, оставить как есть int. У тебя другая проблема - по условию большую часть нечетной длинны файла нужно записывать во второй файл, а у тебя в первый да ещё с запасом пишется.
0
Антон Никифоров
Уровень 29
27 ноября 2022, 11:52
в файле 1 (семь букв(poiutre)). После компеляции в файле 2(poiu), в файле 3(tre). Значит логика правильная. Я так понимаю что валидатор не пропускает так как там должны быть не буквы а цифры (байты которые соответствуют этим буквам). так как метод write(int c); выводит int; а с этим методом void write(byte[] buff, int from, int count);у меня что то не получается. Понять не могу почему??
0
Антон Никифоров
Уровень 29
27 ноября 2022, 13:07
ВСЕМ ОГРОМНОЕ СПАСИБО!!! решил способом указанным ниже воспользовался советами из этой ссылке https://javarush.com/help/84893 НО ПОНЯТЬ НЕ МОГУ В ФАЙЛАХ АУТПУТ У МЕНЯ БЫЛ ТАКОЙ ЖЕ ГДЕ ОШИБКА ПОНЯТЬ ТАК И НЕ ПОНЯЛ!!! int count = fileInputStream1.available(); //C:/Users/Public/3.txt byte[] buffer = new byte[count]; int VxodnoiPotok= fileInputStream1.read(buffer); int firstFileLenght = (count/2)+count%2; fileOutputStream2.write(buffer,0,firstFileLenght); fileOutputStream3.write(buffer,firstFileLenght,(VxodnoiPotok-firstFileLenght)); reader.close(); fileInputStream1.close(); fileOutputStream2.close(); fileOutputStream3.close();
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush