Кто-нибудь задавался вопросом: а если файл1 своим размером превышает размер оперативки???, или другими словами, если нет возможности создать массив буфера таким размером, чтобы поместить в этот буфер весь файл1 ??
у меня получилось решить это следующим образом.
import java.io.*;
public class Solution {
public static void main(String[] args){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
FileInputStream fis = new FileInputStream(br.readLine());
FileOutputStream fos1 = new FileOutputStream(br.readLine());
FileOutputStream fos2 = new FileOutputStream(br.readLine());
br.close();
int bufferSize = 2; // здесь может быть задан размер буфера...например 8000 байт
byte[] buffer = new byte[bufferSize];
int x = fis.available();
int y = 0; // используется для определения в какой файл записывать данные...
int half = x/2+x%2; // определяем середину-половинку файла1
int z = half; // используем для определения сколько считывать в буфер, так чтобы не проскочить середину half
int count; // для определения сколько байт считанно
while(fis.available() > 0) {
x = z < bufferSize? z:bufferSize; // определяем сколько байт считываем в буфер,так чтобы считываемый блок помещался в этот самый буфер
z = z < bufferSize? half:z-bufferSize;
count = fis.read(buffer,0,x);
if(y < half) fos1.write(buffer,0,count);
else fos2.write(buffer,0,count);
y += count;
}
fis.close();
fos1.close();
fos2.close();
}
catch (IOException e) {
System.out.println("Error");
}
}
}