This week's book giveaway is in the General Computing forum. We're giving away four copies of Arduino in Action and have Martin Evans, Joshua Noble, and Jordan Hochenbaum on-line! See this thread for details.
I don't have the mainframe experience to know what a "variable block file" is, but if it's a random-access file with fixed-size records, then the class java.io.RandomAccessFile is what you want. If, on the other hand, those "!" marks divide lines or records, then you're just going to have to read the raw data and break the file into records by looking for "!" characters yourself.