level18.lesson05.task03

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

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


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws Throwable {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String name1 = reader.readLine();
        String name2 = reader.readLine();
        String name3 = reader.readLine();

        FileInputStream stream = new FileInputStream(name1);
        FileOutputStream out1 = new FileOutputStream(name2);
        FileOutputStream out2 = new FileOutputStream(name3);

        byte[] buffer = new byte[stream.available()];
        stream.read(buffer);

        int count = stream.available();
        int count2 = stream.available()%2==0 ? stream.available()/2 : stream.available()/2 + 1;
        int count3 = count-count2;

        out1.write(buffer, 0, count2);
        out2.write(buffer, count2, count3);

        stream.close();
        out1.close();
        out2.close();
        reader.close();

    }
}


Помогите разобраться, в чём ошибка? Вроде всё предельно просто, но не проходит

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));
        FileInputStream readingFile = new FileInputStream(reader.readLine());
        FileOutputStream writingFile2 = new FileOutputStream(reader.readLine());
        FileOutputStream writingFile3 = new FileOutputStream(reader.readLine());

        int halfBytes = readingFile.available() - readingFile.available() / 2;

        while (readingFile.available() > 0)
        {
            halfBytes--;
            int tmpByte = readingFile.read();
            if (halfBytes > 0)
            {
                writingFile2.write(tmpByte);
            } else
            {
                writingFile3.write(tmpByte);
            }
        }
        reader.close();
        readingFile.close();
        writingFile2.close();
        writingFile3.close();
    }
}

level18.lesson05.task03

У меня вопрос ведь в задании не сказано что для каждого файла должен быть свой поток. Я решил задачу используя один поток для записи в файл. Открыл поток для первого файла, записал в него часть данных, закрыл. Открыл для второго файла, записал оставшееся и закрыл. Задача не была принята на сервере до тех пор пока не сделал для каждого файла свой поток записи. Почему нельзя было использовать один поток, из-за этого могут быть какие-то проблемы?
  • ,

level18.lesson05.task03

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

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

import java.io.*;


public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = reader.readLine();
        String fileName2 = reader.readLine();
        String fileName3 = reader.readLine();

        FileInputStream file1 = new FileInputStream(fileName1);
        FileOutputStream file2 = new FileOutputStream(fileName2);
        FileOutputStream file3 = new FileOutputStream(fileName3);

        byte[] buffer = new byte[file1.available()];
        int byteCount = file1.read(buffer);

        if (byteCount % 2 == 0)
        {
            file2.write(buffer, 0, byteCount / 2);
            file3.write(buffer, byteCount / 2, byteCount / 2);
        } else
        {
            file2.write(buffer, 0, byteCount / 2 + 1);
            file3.write(buffer, byteCount / 2 + 1, byteCount / 2 );
        }

        reader.close();
        file1.close();
        file2.close();
        file3.close();
    }
}

парни, посмотрите свежим взглядом, код работает, но не принимает.

level18.lesson05.task03

Не проходит…


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

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

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 a = reader.readLine();
        String b = reader.readLine();
        String c = reader.readLine();
        ArrayList<Integer> list = new ArrayList<Integer>();
        FileInputStream filea = new FileInputStream(a);
        FileOutputStream fileb = new FileOutputStream(b);
        FileOutputStream filec = new FileOutputStream©;

        while (filea.available() >0)
        {
            list.add(filea.read());
        }


            for(int i = 0;i <list.size()/2;i++)
            {
                fileb.write(list.get(i));
            }

            for(int i =list.size()/2 +1;i <list.size();i++)
            {
                filec.write(list.get(i));
            }




        filea.close();
        fileb.close();
        filec.close();






    }
}