package javaforce.utils;
/*/
File splitter
Usage : filein fileout1 fileout2 [size_of_fileout1]
/*/
import java.io.*;
import java.util.Random;
import javaforce.*;
public class jfs {
public static void main(String args[]) {
jfs x = new jfs();
x.main2(args);
}
final int BUFSIZ = (64 * 1024); //buffer size
void usage() {
System.out.println("File splitter utility");
System.out.println("Usage : jfs filein fileout1 fileout2 [size]");
System.out.println(" size = size of fileout1 (default = 1/2 of filein)");
System.exit(0);
}
void error(String msg) {
System.out.println("Error : " + msg);
System.exit(1);
}
void main2(String args[]) {
ParseArgs pa = new ParseArgs();
pa.arg_decoderefs = false; //do not process @ref files
pa.arg_parse(args);
if (pa.arg_names.size() < 3) {
usage();
}
String fni, fno1, fno2;
FileInputStream fi;
FileOutputStream fo1, fo2;
fni = pa.arg_names.get(0);
fno1 = pa.arg_names.get(1);
fno2 = pa.arg_names.get(2);
int size = 0;
if (pa.arg_names.size() == 4) {
size = JF.atoi(pa.arg_names.get(3));
}
byte buf[] = new byte[BUFSIZ];
fi = JF.fileopen(fni);
if (fi == null) {
JF.msg("Unable to open : " + fni);
return;
}
int ifs = JF.filelength(fi);
if (size > ifs) {
JF.msg("size > sizeof(filein)");
return;
}
if (size == 0) {
size = ifs / 2;
}
fo1 = JF.filecreate(fno1);
fo2 = JF.filecreate(fno2);
//write fileout1
int os = 0;
int read;
while (os < size) {
if (os + BUFSIZ < size) {
read = JF.read(fi, buf, 0, BUFSIZ);
} else {
read = JF.read(fi, buf, 0, size - os);
}
if (!JF.write(fo1, buf, 0, read)) {
JF.msg("write failed on fileout1");
return;
}
os += read;
}
//write fileout2
size = ifs - size;
os = 0;
while (os < size) {
if (os + BUFSIZ < size) {
read = JF.read(fi, buf, 0, BUFSIZ);
} else {
read = JF.read(fi, buf, 0, size - os);
}
if (!JF.write(fo2, buf, 0, read)) {
JF.msg("write failed on fileout2");
return;
}
os += read;
}
JF.msg("Ok!");
}
}