Books

Acquire books one at a time as you find you need them. With the Internet and Google, there is much less need to buy books. I have a huge number of books and throw some very costly ones away from time to time simply because they are no longer technologically relevant.

Books on Java

You know when you learned to speak a new language, you probably started with a method to help you learn practical things like words and phrases. You also purchased a grammar that explained the language and became a reference tool on usage and how to structure things.

So it is with Java, I suggest:

Head First Java, from O'Reilly, as your method: it's fun
Thinking in Java, by Bruce Eckel, as your grammar: it's rock-solid

The first is the book to start with; the second you could do without if you don't mind sorting through Google looking for "grammar" help.

Later, as you get more into Java, I suggest the following books. By suggesting them, I mean to say that I use Google a lot, so I wouldn't suggest these unless I thought they imparted knowledge and wisdom that make them worth acquiring instead of using Google. You can get a lot of advice on the Internet, but some is bad. The advice from these works is rock-solid.

Effective Java, by Joshua Block
Java Concurrency in Practice, by Brian Goetz

As a believer in "test first, code after", I would also suggest these books. The first one is less theoretical and more practical; the second is more or less the Bible on the topic.

Practical Unit Testing by Tomek Kaczanowski; get the JUnit version
Growing Object-oriented Software, Guided by Tests, by Steve Freeman and Nat Pryce

Other books

I'm a huge fan of O'Reilly's Head First series. For this reason, I have a lot of them. One of my very favorite was Head First Design Patterns. It rocks.