BKCommonLib/FileData
Introduction
To make raw data storage possible without the common try-catch logic blurring your vision, there are data reading and writing classes to help you. IO exceptions, missing files or access errors are automatically dealt with.
Usage
To use it, create a new instance of the class (nested class), implement the read/write methods and call read() or write() at the end. Examples:
DataReader new DataReader(filename) { public void read(DataInputStream stream) throws IOException { final int count = stream.readInt(); for (int i = 0; i < count; i++) { data.add(stream.readInt()); } } }.read(); DataWriter new DataWriter(filename) { public void write(DataOutputStream stream) throws IOException { int count = stream.writeInt(data.size()); for (Integer val : data) { data.writeInt(val.intValue()); } } }.write();
Compressed DataReader/DataWriter
The exact same code, only use the respective classes instead. The data is compressed using a DeflaterOutputStream and decompressed using a InflaterInputStream
Notes
You are using nested classes here, which means that it is not possible to access all variables 'just like that'. To access a variable from within read or write, you have several options:
Declare them statically or provide a way to access them statically (getInstance()) Declare the variables final Example of final variables being used this way:
public void writeMyValue(String filename) { final int value = this.getSpecialValue(); // Variable is final, therefore we can access it new DataWriter(filename) { public void write(DataOutputStream stream) throws IOException { stream.writeInt(value); } }.write(); }