• ,

level18.lesson05.task03

Народ, подскажите, пожалуйста, что тут может быть не так. В файлы все пишется как надо, отрабатывает и для четных байт, и для нечетных, для пустого первого файла тоже все работает. Все потоки закрыты. Что тут не так?

package com.javarush.test.level18.lesson05.task03;

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

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {

//        чтение файлов с консоли
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        InputStream inputStream = new FileInputStream(reader.readLine());
        FileOutputStream outputStream1 = new FileOutputStream(reader.readLine());
        FileOutputStream outputStream2 = new FileOutputStream(reader.readLine());

//        определяем, сколько всего символов, заносим их в массив buffer
        int count = inputStream.available();
        int countFirstOutput, countSecondOutput;
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);

        if (count > 0) {
            if (count % 2 == 0) {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 1;
            } else {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 2;
            }
        } else {

//            выполняется в том случае, если первый файл пустой
            countFirstOutput = 0;
            countSecondOutput = 0;
        }

//        пишем в потоки
        outputStream1.write(buffer, 0, countFirstOutput);
        outputStream2.write(buffer, countFirstOutput, countSecondOutput);

//        закрытие потоков
        reader.close();
        inputStream.close();
        outputStream1.close();
        outputStream2.close();

    }
}

6 комментариев

ss-20
  • ss-20
  • +1
  • Комментарий отредактирован 2017-01-09 14:00:45 пользователем ss-20
сделайте проверку — запустите программу. введите имена файлов — проверьте выполняются ли условия задачи.
SpKiwi
Запустил. Ввел. Выполняются.
Иначе, я бы сюда не писал.
ss-20
при выводе в файл — во второй файл выводится больше, чем в третий.
SpKiwi
Хм, спасибо за подсказку. Поменял вывод, теперь выходит, что в файл 2 пишется больше при нечетном количестве байт. При четном все поровну делится. Проверил на файлах, все отрабатывает как надо, в том числе, и с пустым файлом. Потоки закрыты. Но не принимается. В чем тут может быть ошибка?:)
import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {

//        чтение файлов с консоли
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        InputStream inputStream = new FileInputStream(reader.readLine());
        FileOutputStream outputStream1 = new FileOutputStream(reader.readLine());
        FileOutputStream outputStream2 = new FileOutputStream(reader.readLine());

//        определяем, сколько всего символов, заносим их в массив buffer
        int count = inputStream.available();
        int countFirstOutput, countSecondOutput;
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);

        if (count > 0) {
            if (count % 2 == 0) {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 1;
            } else {
                countFirstOutput = (count / 2) + 1;
                countSecondOutput = countFirstOutput / 2;
            }
        } else {
//            обрабатываем пустой файл
            countFirstOutput = 0;
            countSecondOutput = 0;
        }

//        пишем в потоки
        outputStream1.write(buffer, 0, countFirstOutput);
        outputStream2.write(buffer, countFirstOutput, countSecondOutput);

//        закрытие потоков
        reader.close();
        inputStream.close();
        outputStream1.close();
        outputStream2.close();

    }
}
ss-20
else {
                countFirstOutput = (count / 2) + 1;
                countSecondOutput = countFirstOutput / 2;

заменить на
else {
                    countFirstOutput = count / 2;
                    countSecondOutput = count / 2 + 1;
                }
SpKiwi
Благодарю:)
Заменил не совсем так, но все помогло.
Я тестировал на одном и том же количестве букв всегда, вот и вышла ошибка.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.