Not really - it's a complicated process, and the only time I've ever done it was in the floppy disk days - and it took about an hour per megabyte to restore after the FAT died. The problem is worse with flash drives, because they don't overwrite used blocks - instead they write to a new block and put the old one of a deletable list internally (because they wear out the more you write to them) - so you end up with multiple blocks that look very, very similar, so you have to work out exactly which version is the one you need for each block. If you are lucky, you can get away with working from the "end backwards" as until the flash is full the early blocks aren't recycled.
What I would do is start with solthing like
Recuva[
^] - I've had some good sucess with it in the past, and it's free!