I have some files stored in a database blob column in Oracle 9.
I would like to have those files stored in the file system.
This should be pretty easy, but
There is another way of doing the same operation faster. Actually the answer above works fine but like IOUtils.copy(in,out)
it takes a lot of time for big documents. The reason is you are trying to write your blob by 4KB iteration. Simplier solution :
Blob blob = rs.getBlob(column);
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream(someFile);
byte[] buff = blob.getBytes(1,(int)blob.getLength());
out.write(buff);
out.close();
Your outputStream will write the blob in one shot.
Edit
Sorry didn't see the Edit section on the intial Post.
You'd want to get the blob as an inputstream and dump its contents to the outputstream. So 'misery' should be something like:
Blob blob = rs.getBlob(column);
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream(someFile);
byte[] buff = new byte[4096]; // how much of the blob to read/write at a time
int len = 0;
while ((len = in.read(buff)) != -1) {
out.write(buff, 0, len);
}
If you find yourself doing a lot of IO work like this, you might look into using Apache Commons IO to take care of the details. Then everything after setting up the streams would just be:
IOUtils.copy(in, out);