package rebecca.e.util.io;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class FilePacker {
/// Save FileData from memory to File
public void String2File(String f, String data, boolean b)
throws IOException {
// TODO Auto-generated method stub
if (b)
System.out.println("Writing: " + f);
FileOutputStream fos = new FileOutputStream(f);
fos.write(data.getBytes());
fos.flush();
fos.close();
}
void printfile(String p, File f) {
System.out.println(p + f.getName() + ":" + f.getData());
// this.Attributes.get(i)
}
void printfolder(String p, Dir d) {
print0(p, d);
}
/// Print loaded folder tree
public void print(Dir d) {
this.print0(" ", d);
// TODO Auto-generated method stub
}
/// Print loaded file
public void print(File f) {
this.printfile(" ", f);
// TODO Auto-generated method stub
}
void print0(String p, Dir d) {
System.out.println(p + " ");
for (int i = 0; i < d.getFolder().size(); i++) {
this.printfolder(p + " ", d.getFolder().get(i));
}
for (int i = 0; i < d.getFile().size(); i++) {
this.printfile(p + " ", d.getFile().get(i));
}
// // TODO Auto-generated method stub
// String t0 = p + t + "\n";
// t0 = t0 + p + "";
// for (int i = 0; i < this.Attributes.size(); i++) {
// t0 = t0 + p + Attributes.getKey(i) + ":" + this.Attributes.get(i)
// + "\n";
//
// }
// for (int i = 0; i < this.SubNodes.size(); i++) {
// print0(" " + p, SubNodes.get(i).toString());
//
// }
//
// return t0;
}
/// Load file to memory (String)
public String File2String(String f, boolean b) throws IOException {
// TODO Auto-generated method stub
FileInputStream fstream;
DataInputStream in;
int bb;
fstream = new FileInputStream(f);
in = new DataInputStream(fstream);
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (b) {
System.out.println("Reading: " + f);
}
while ((bb = in.read()) != -1) {
out.write(bb);
}
String s = out.toString();
out.close();// -Djava.security.policy=C:/rmi.plc
in.close();
fstream.close();
return s;
}
/// Platform-independent File (Dir) separator
public static String iV = System.getProperty("file.separator");
///Archiving
public void addFile2Dir(Dir D, String filePath, boolean b)
throws IOException {
java.io.File f = new java.io.File(filePath);
if (f.isFile()) {
File F = new File();
F.setName(f.getName());
F.setData(this.File2String(filePath, true));
// F.setData("some data");
D.getFile().add(F);
}
if (f.isDirectory()) {
Dir Dr = new Dir();
Dr.setName(f.getName());
String[] l = f.list();
for (int i = 0; i < l.length; i++) {
this.addFile2Dir(Dr, filePath + iV + l[i], b);
}
D.getFolder().add(Dr);
}
}
///Extracting
public void ExtractToFolder(Dir d, String Dir, boolean b)
throws IOException {
mkDir(Dir, b);
List l = d.getFile();
for (int i = 0; i < l.size(); i++) {
File f = l.get(i);
String name = f.getName();
String data = f.getData();
String2File(Dir + iV + name, data, b);
}
List j = d.getFolder();
for (int i = 0; i < j.size(); i++) {
Dir f = j.get(i);
String name = f.getName();
mkDir(Dir + iV + name, b);
ExtractToFolder(f, Dir + iV + name, b);
// String2File(Dir + iV + name, data, b);
}
}
private void mkDir(String Dir, boolean b) {
// TODO Auto-generated method stub
if (b)
System.out.println("Creating: " + Dir);
if (!new java.io.File(Dir).mkdir()) {
if (b)
System.out.println("Unable to create folder: " + Dir + " "
+ "(Already exist?)");
}
}
}