Refactoring is a classic about productive work with suboptimally designed and legacy code. It's a must-read for any Java developer. The book was written by Martin Fowler with contributions from other authors.
One of the reasons Refactoring was is so popular is that it was written with the reader in mind (which can't really be said about all software books). The language is lucid and understandable. The author opens with a simple yet powerful example of refactoring. On one hand, this example whets reader's appetite by demonstrating how effective the process of refactoring can be when thought of in systematic terms. On the other, hand it familiarizes the reader with a layout convention used in the book - I thought this was a very smart trick.
Here is a word of caution: do not get an e-book. Refactoring is designed to be read in a hard-copy. It's a great read on its own, but it's also a supreme reference guide and e-books just aren't cut out for that.