binary-data-format/src/bdf/file/BdfFileManager.java

90 lines
1.8 KiB
Java

package bdf.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream;
import bdf.data.BdfDatabase;
import bdf.types.BdfObject;
import bdf.types.BdfReader;
import bdf.util.FileHelpers;
public class BdfFileManager extends BdfReader
{
protected String path;
private boolean compressed;
private static BdfDatabase init(String path, boolean compressed)
{
// Get the file
File file = new File(path);
// Does the file have read access
if(file.canRead())
{
if(compressed)
{
// Return the files contents as a database
return new BdfDatabase(FileHelpers.readAllCompressedIgnoreErrors(path));
}
else
{
// Return the files contents as a database
return new BdfDatabase(FileHelpers.readAllIgnoreErrors(path));
}
}
// Return an empty database if there is no read access
return new BdfDatabase(0);
}
public BdfFileManager(String path, boolean compressed) {
super(init(path, compressed));
this.compressed = compressed;
this.path = path;
}
public BdfFileManager(String path) {
this(path, false);
}
public void saveDatabase(String path)
{
try
{
// Get the file handler
File file = new File(path);
// Create the parent directories
file.getAbsoluteFile().getParentFile().mkdirs();
// Get the database file for output
OutputStream out = new FileOutputStream(path);
if(compressed) {
out = new GZIPOutputStream(out);
}
// Write the database to the file
BdfDatabase db = this.serialize();
db.writeToStream(out);
// Close the file output stream
out.close();
}
catch(IOException e) {
return;
}
}
public void saveDatabase() {
this.saveDatabase(this.path);
}
}