/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
//package com.power.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.LinkedList;
import java.util.Scanner;
/**
*
* @author f6036477
*/
public class FileSplitter {
private File f;
public FileSplitter(File f) {
if (f == null)
throw new IllegalArgumentException("File must be not null!");
this.f = f;
System.out.println("File Length (KB): " + f.length() / 1024.0);
}
public boolean split(long size) {
if (size <= 0)
return false;
try {
int parts = ((int) (f.length() / size));
long flength = 0;
if (f.length() % size > 0)
parts++;
File[] fparts = new File[parts];
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = null;
for (int i = 0; i < fparts.length; i++) {
fparts[i] = new File(f.getPath() + ".part." + i);
fos = new FileOutputStream(fparts[i]);
int read = 0;
long total = 0;
byte[] buff = new byte[1024];
int origbuff = buff.length;
while (total < size) {
read = fis.read(buff);
if (read != -1) {
buff = FileEncoder.invertBuffer(buff, 0, read);
total += read;
flength += read;
fos.write(buff, 0, read);
}
if (i == fparts.length - 1 && read < origbuff)
break;
}
fos.flush();
fos.close();
fos = null;
}
fis.close();
// f.delete();
f = fparts[0];
System.out.println("Length Readed (KB): " + flength / 1024.0);
return true;
} catch (Exception ex) {
System.out.println(ex);
System.out.println(ex.getLocalizedMessage());
System.out.println(ex.getStackTrace()[0].getLineNumber());
ex.printStackTrace();
return false;
}
}
public boolean split(int parts) {
if (parts <= 0)
return false;
return this.split(f.length() / parts);
}
public boolean unsplit() {
try {
LinkedList list = new LinkedList();
boolean exists = true;
File temp = null;
File dest = new File(f.getPath().substring(0,
f.getPath().lastIndexOf(".part")));
FileInputStream fis = null;
FileOutputStream fos = new FileOutputStream(dest);
int part = 0;
long flength = 0;
String name = null;
while (exists) {
name = f.getPath();
name = name.substring(0, name.lastIndexOf(".") + 1) + part;
temp = new File(name);
exists = temp.exists();
if (!exists)
break;
fis = new FileInputStream(temp);
byte[] buff = new byte[1024];
int read = 0;
while ((read = fis.read(buff)) > 0) {
buff = FileEncoder.invertBuffer(buff, 0, read);
fos.write(buff, 0, read);
if (read > 0)
flength += read;
}
fis.close();
fis = null;
temp.delete();
part++;
}
fos.flush();
fos.close();
f = dest;
System.out.println("Length Writed: " + flength / 1024.0);
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Split? [true/false]: ");
boolean split = Boolean.parseBoolean(scan.next());
if (split) {
File file = new File("T:/Java/com/power/nb/visual/dist/visual.zip");
FileSplitter splitter = new FileSplitter(file);
System.out.println("splitter.split(3): " + splitter.split(3));
} else {
File file = new File(
"T:/Java/com/power/nb/visual/dist/visual.zip.part.0");
FileSplitter splitter = new FileSplitter(file);
System.out.println("splitter.unsplit(): " + splitter.unsplit());
}
}
}
class FileEncoder {
private File f;
public FileEncoder(File f) {
if (f == null)
throw new IllegalArgumentException("File must be not null!");
this.f = f;
}
public boolean encode() {
try {
File temp = new File(f.getPath() + ".tmp");
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(temp);
byte[] buff = new byte[1024];
int read = 0;
while ((read = fis.read(buff)) > 0) {
buff = FileEncoder.invertBuffer(buff, 0, read);
fos.write(buff, 0, read);
}
fis.close();
fos.flush();
fos.close();
f.delete();
temp.renameTo(f);
f = temp;
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public static byte[] invertBuffer(byte[] buff, int offset, int length) {
if (buff == null || buff.length == 0)
return null;
if (offset < 0 || length < 0)
return null;
byte[] inverted = new byte[length];
int ind = length - 1;
for (int i = offset; i < length; i++) {
inverted[ind] = buff[i];
ind--;
}
return inverted;
}
public boolean decode() {
return this.encode();
}
public static void main(String[] args) {
File file = new File("T:/Java/com/power/nb/visual/dist/visual.zip");
FileEncoder enc = new FileEncoder(file);
System.out.println("enc.decode(): " + enc.decode());
}
}