Ebook Java Cookbook

I downloaded HotJava and began to play with it. At first I wasn't sure about this newfangled language, which looked like a mangled C/C++. I wrote test and demo programs, sticking them a few at a time into a directory that I called javasrcto keep it separate from my C source (as often the programs would have the same name). And as I learned more about Java, I began to see its advantagesfor many kinds of work, such as the automatic memory reclaim and the elimination of pointer calculations. The javasrcdirectory kept growing. I wrote a Java course for Learning Tree, and the directory kept growing faster, reaching the point where it needed subdirectories. Even then, it became increasingly difficult to find things, and it soon became evident that some kind of documentation was needed. In a sense, this book is the result of a high-speed collision between my javasrcdirectory and a documentation framework established for another newcomer language. In O'Reilly'sPerl Cookbook,Tom Christiansen and Nathan Torkington worked out a very successful design, presenting the material in small, focused articles called "recipes." The original model for such a book is, of course, the familiar kitchen cookbook. There is a long history of using the term "cookbook" to refer to an enumeration of how-to recipes relating to computers. On the software side, Donald Knuth applied the "cookbook" analogy to his book The Art of Computer Programming(Addison Wesley), first published in 1968. On the hardware side, Don Lancaster wrote The TTL Cookbook(Sams). (Transistor-transistor logic, or TTL, was the small-scale building block of electronic circuits at the time.) Tom and Nathan worked out a successful variation on this, and I recommend their book for anyone who wishes to, as they put it, "learn more Perl." Indeed, the work you are now reading intends to be a book for the person who wishes to "learn more Java." The code in each recipe is intended to be self-contained; feel free to borrow bits and pieces of any of it for use in your own projects.

pdf711 trang | Chia sẻ: ttlbattu | Lượt xem: 2534 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Ebook Java Cookbook, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Copyright Table of Contents Index Full Description About the Author Reviews Reader reviews Errata Java Cookbook Ian Darwin Publisher: O'Reilly First Edition June 2001 ISBN: 0-59600-170-3, 882 pages This book offers Java developers short, focused pieces of code that are easy to incorporate into other programs. The idea is to focus on things that are useful, tricky, or both. The book's code segments cover all of the dominant APIs and should serve as a great "jumping- off place" for Java developers who want to get started in areas outside their specialization. Java Cookbook Preface Who This Book Is For What's in This Book? Platform Notes Other Books Conventions Used in This Book Comments and Questions Getting the Source Code Acknowledgments 1. Getting Started: Compiling, Running, and Debugging 1.1 Introduction 1.2 Compiling and Running Java: JDK 1.3 Editing and Compiling with a Color-Highlighting Editor 1.4 Compiling, Running, and Testing with an IDE 1.5 Using Classes from This Book 1.6 Automating Compilation with jr 1.7 Automating Compilation with make 1.8 Automating Compilation with Ant 1.9 Running Applets 1.10 Dealing with Deprecation Warnings 1.11 Conditional Debugging without #ifdef 1.12 Debugging Printouts 1.13 Using a Debugger 1.14 Unit Testing: Avoid the Need for Debuggers 1.15 Decompiling Java Class Files 1.16 Preventing Others from Decompiling Your Java Files 1.17 Getting Readable Tracebacks 1.18 Finding More Java Source Code 1.19 Program: Debug 2. Interacting with the Environment 2.1 Introduction 2.2 Getting Environment Variables 2.3 System Properties 2.4 Writing JDK Release-Dependent Code 2.5 Writing Operating System-Dependent Code 2.6 Using CLASSPATH Effectively 2.7 Using Extensions or Other Packaged APIs 2.8 Parsing Command-Line Arguments 3. Strings and Things 3.1 Introduction 3.2 Taking Strings Apart with Substrings 3.3 Taking Strings Apart with StringTokenizer 3.4 Putting Strings Together with + and StringBuffer 3.5 Processing a String One Character at a Time 3.6 Aligning Strings 3.7 Converting Between Unicode Characters and Strings 3.8 Reversing a String by Word or Character 3.9 Expanding and Compressing Tabs 3.10 Controlling Case 3.11 Indenting Text Documents 3.12 Entering Non-Printable Characters 3.13 Trimming Blanks from the End of a String 3.14 Parsing Comma-Separated Data 3.15 Program: A Simple Text Formatter 3.16 Program: Soundex Name Comparisons 4. Pattern Matching with Regular Expressions 4.1 Introduction 4.2 Regular Expression Syntax 4.3 How REs Work in Practice 4.4 Using Regular Expressions in Java 4.5 Testing REs Interactively 4.6 Finding the Matching Text 4.7 Replacing the Matching Text 4.8 Printing All Occurrences of a Pattern 4.9 Printing Lines Containing a Pattern 4.10 Controlling Case in match( ) and subst( ) 4.11 Precompiling the RE 4.12 Matching Newlines in Text 4.13 Program: Data Mining 4.14 Program: Full Grep 5. Numbers 5.1 Introduction 5.2 Checking Whether a String Is a Valid Number 5.3 Storing a Larger Number in a Smaller 5.4 Taking a Fraction of an Integer Without Using Floating Point 5.5 Ensuring the Accuracy of Floating-Point Numbers 5.6 Comparing Floating-Point Numbers 5.7 Rounding Floating-Point Numbers 5.8 Formatting Numbers 5.9 Converting Between Binary, Octal, Decimal, and Hexadecimal 5.10 Operating on a Series of Integers 5.11 Working with Roman Numerals 5.12 Formatting with Correct Plurals 5.13 Generating Random Numbers 5.14 Generating Better Random Numbers 5.15 Calculating Trigonometric Functions 5.16 Taking Logarithms 5.17 Multiplying Matrixes 5.18 Using Complex Numbers 5.19 Handling Very Large Numbers 5.20 Program: TempConverter 5.21 Program: Number Palindromes 6. Dates and Times 6.1 Introduction 6.2 Finding Today's Date 6.3 Printing Date/Time in a Specified Format 6.4 Representing Dates in Other Epochs 6.5 Converting YMDHMS to a Calendar or Epoch Seconds 6.6 Parsing Strings into Dates 6.7 Converting Epoch Seconds to DMYHMS 6.8 Adding to or Subtracting from a Date or Calendar 6.9 Difference Between Two Dates 6.10 Comparing Dates 6.11 Day of Week/Month/Year or Week Number 6.12 Calendar Page 6.13 High-Resolution Timers 6.14 Sleeping for a While 6.15 Program: Reminder Service 7. Structuring Data with Java 7.1 Introduction 7.2 Data Structuring Using Arrays 7.3 Resizing an Array 7.4 Like an Array, but More Dynamic 7.5 Data-Independent Access with Iterators 7.6 Structuring Data in a Linked List 7.7 Mapping with Hashtable and HashMap 7.8 Storing Strings in Properties and Preferences 7.9 Sorting a Collection 7.10 Sorting in Java 1.1 7.11 Avoiding the Urge to Sort 7.12 Sets 7.13 Finding an Object in a Collection 7.14 Converting a Collection to an Array 7.15 Rolling Your Own Iterator 7.16 Stack 7.17 Multidimensional Structures 7.18 Finally, Collections 7.19 Program: Timing Comparisons 8. Object-Oriented Techniques 8.1 Introduction 8.2 Printing Objects: Formatting with toString( ) 8.3 Overriding the Equals Method 8.4 Overriding the Hashcode Method 8.5 The Clone Method 8.6 The Finalize Method 8.7 Using Inner Classes 8.8 Providing Callbacks via Interfaces 8.9 Polymorphism/Abstract Methods 8.10 Passing Values 8.11 Roll Your Own Exceptions 8.12 Program: Plotter 9. Input and Output 9.1 Introduction 9.2 Reading Standard Input 9.3 Writing Standard Output 9.4 Opening a File by Name 9.5 Copying a File 9.6 Reading a File into a String 9.7 Reassigning the Standard Streams 9.8 Duplicating a Stream as It Is Written 9.9 Reading/Writing a Different Character Set 9.10 Those Pesky End-of-Line Characters 9.11 Beware Platform-Dependent File Code 9.12 Reading "Continued" Lines 9.13 Scanning a File 9.14 Binary Data 9.15 Seeking 9.16 Writing Data Streams from C 9.17 Saving and Restoring Serialized Objects 9.18 Preventing ClassCastExceptions with SerialVersionUID 9.19 Reading and Writing JAR or Zip Archives 9.20 Reading and Writing Compressed Files 9.21 Program: Text to PostScript 9.22 Program: TarList (File Converter) 10. Directory and Filesystem Operations 10.1 Introduction 10.2 Getting File Information 10.3 Creating a File 10.4 Renaming a File 10.5 Deleting a File 10.6 Creating a Transient File 10.7 Changing File Attributes 10.8 Listing a Directory 10.9 Getting the Directory Roots 10.10 Making New Directories 10.11 Program: Find 11. Programming Serial and Parallel Ports 11.1 Introduction 11.2 Choosing a Port 11.3 Opening a Serial Port 11.4 Opening a Parallel Port 11.5 Resolving Port Conflicts 11.6 Reading and Writing: Lock Step 11.7 Reading and Writing: Event-Driven 11.8 Reading and Writing: Threads 11.9 Program: Penman Plotter 12. Graphics and Sound 12.1 Introduction 12.2 Painting with a Graphics Object 12.3 Testing Graphical Components 12.4 Drawing Text 12.5 Drawing Centered Text in a Component 12.6 Drawing a Drop Shadow 12.7 Drawing an Image 12.8 Playing a Sound File 12.9 Displaying a Moving Image with Video 12.10 Drawing Text with 2D 12.11 Printing: JDK 1.1 12.12 Printing: Java 2 12.13 Program: PlotterAWT 12.14 Program: Grapher 13. Graphical User Interfaces 13.1 Introduction 13.2 Displaying GUI Components 13.3 Designing a Window Layout 13.4 A Tabbed View of Life 13.5 Action Handling: Making Buttons Work 13.6 Action Handling Using Anonymous Inner Classes 13.7 Terminating a Program with "Window Close" 13.8 Dialogs: When Later Just Won't Do 13.9 Getting Program Output into a Window 13.10 Choosing a File with JFileChooser 13.11 Choosing a Color 13.12 Centering a Main Window 13.13 Changing a Swing Program's Look and Feel 13.14 Program: Custom Font Chooser 13.15 Program: Custom Layout Manager 14. Internationalization and Localization 14.1 Introduction 14.2 Creating a Button with I18N Resources 14.3 Listing Available Locales 14.4 Creating a Menu with I18N Resources 14.5 Writing Internationalization Convenience Routines 14.6 Creating a Dialog with I18N Resources 14.7 Creating a Resource Bundle 14.8 JILTing Your Code 14.9 Using a Particular Locale 14.10 Setting the Default Locale 14.11 Formatting Messages 14.12 Program: MenuIntl 14.13 Program: BusCard 15. Network Clients 15.1 Introduction 15.2 Contacting a Server 15.3 Finding and Reporting Network Addresses 15.4 Handling Network Errors 15.5 Reading and Writing Textual Data 15.6 Reading and Writing Binary Data 15.7 Reading and Writing Serialized Data 15.8 UDP Datagrams 15.9 Program: TFTP UDP Client 15.10 Program: Telnet Client 15.11 Program: Chat Client 16. Server-Side Java: Sockets 16.1 Introduction 16.2 Opening a Server for Business 16.3 Returning a Response (String or Binary) 16.4 Returning Object Information 16.5 Handling Multiple Clients 16.6 Network Logging 16.7 Program: A Java Chat Server 17. Network Clients II: Applets and Web Clients 17.1 Introduction 17.2 Embedding Java in a Web Page 17.3 Applet Techniques 17.4 Contacting a Server on the Applet Host 17.5 Making an Applet Show a Document 17.6 Making an Applet Run a CGI Script 17.7 Reading the Contents of a URL 17.8 Extracting HTML from a URL 17.9 Extracting URLs from a File 17.10 Converting a Filename to a URL 17.11 Program: MkIndex 17.12 Program: LinkChecker 18. Web Server Java: Servlets and JSP 18.1 Introduction 18.2 First Servlet: Generating an HTML Page 18.3 Servlets: Processing Form Parameters 18.4 Cookies 18.5 Session Tracking 18.6 Generating PDF from a Servlet 18.7 HTML Meets Java: JSP 18.8 JSP Include/Forward 18.9 JavaServer Pages Using a Servlet 18.10 Simplifying Your JSP with a JavaBean 18.11 JSP Syntax Summary 18.12 Program: CookieCutter 18.13 Program: JabaDot Web News Portal 19. Java and Electronic Mail 19.1 Introduction 19.2 Sending Email: Browser Version 19.3 Sending Email: For Real 19.4 Mail-Enabling a Server Program 19.5 Sending MIME Mail 19.6 Providing Mail Settings 19.7 Sending Mail Without Using JavaMail 19.8 Reading Email 19.9 Program: MailReaderBean 19.10 Program: MailClient 20. Database Access 20.1 Introduction 20.2 Text-File Databases 20.3 DBM Databases 20.4 JDBC Setup and Connection 20.5 Connecting to a JDBC Database 20.6 Sending a JDBC Query and Getting Results 20.7 Using JDBC Parameterized Statements 20.8 Using Stored Procedures with JDBC 20.9 Changing Data Using a ResultSet 20.10 Changing Data Using SQL 20.11 Finding JDBC Metadata 20.12 Program: JDAdmin 21. XML 21.1 Introduction 21.2 Transforming XML with XSLT 21.3 Parsing XML with SAX 21.4 Parsing XML with DOM 21.5 Verifying Structure with a DTD 21.6 Generating Your Own XML with DOM 21.7 Program: xml2mif 22. Distributed Java: RMI 22.1 Introduction 22.2 Defining the RMI Contract 22.3 RMI Client 22.4 RMI Server 22.5 Deploying RMI Across a Network 22.6 Program: RMI Callbacks 22.7 Program: RMIWatch 23. Packages and Packaging 23.1 Introduction 23.2 Creating a Package 23.3 Documenting Classes with Javadoc 23.4 Archiving with jar 23.5 Running an Applet from a JAR 23.6 Running an Applet with a JDK 23.7 Running a Program from a JAR 23.8 Preparing a Class as a JavaBean 23.9 Pickling Your Bean into a JAR 23.10 Packaging a Servlet into a WAR File 23.11 "Write Once, Install Anywhere" 23.12 Java Web Start 23.13 Signing Your JAR File 24. Threaded Java 24.1 Introduction 24.2 Running Code in a Different Thread 24.3 Displaying a Moving Image with Animation 24.4 Stopping a Thread 24.5 Rendezvous and Timeouts 24.6 Thread Communication: Synchronized Code 24.7 Thread Communication: wait( ) and notifyAll( ) 24.8 Background Saving in an Editor 24.9 Threaded Network Server 25. Introspection, or "A Class Named Class" 25.1 Introduction 25.2 Getting a Class Descriptor 25.3 Finding and Using Methods and Fields 25.4 Loading and Instantiating a Class Dynamically 25.5 Constructing a Class from Scratch 25.6 Performance Timing 25.7 Printing Class Information 25.8 Program: CrossRef 25.9 Program: AppletViewer 26. Using Java with Other Languages 26.1 Introduction 26.2 Running a Program 26.3 Running a Program and Capturing Its Output 26.4 Mixing Java and Scripts with BSF 26.5 Blending in Native Code (C/C++) 26.6 Calling Java from Native Code 26.7 Program: DBM 27. Afterword Colophon Preface If you know a little Java™, great. If you know more Java, even better! This book is ideal for anyone who knows some Java and wants to learn more. I started programming in C in 1980 while working at the University of Toronto, and C served me quite well through the 1980s and into the 1990s. In 1995, as the nascent language Oak was being renamed Java, I had the good fortune to be told about it by my colleague J. Greg Davidson. I sent an email to the address Greg provided, and got this mail back: From scndprs n.Eng.Sun.COM!jag Wed Mar 29 19:43:54 1995 Date: Wed, 29 Mar 1995 16:47:51 +0800 From: jag@scndprsn.Eng.Sun.COM (James Gosling) To: ian@scooter.Canada.Sun.COM, ian@darwinsys.com Subject: Re: WebRunner Cc: goltz@sunne.East.Sun.COM Content - Length: 361 Status : RO X- Lines: 9 > Hi. A friend told me about WebRunner(?), your extensible network > browser. It and Oak(?) its extention language, sounded neat. Can > you please tell me if it's available for play yet, and/or if any > papers on it are available for FTP? Check out (oak got renamed to java and webrunner got renamed to hotjava to keep the lawyers happy) I downloaded HotJava and began to play with it. At first I wasn't sure about this newfangled language, which looked like a mangled C/C++. I wrote test and demo programs, sticking them a few at a time into a directory that I called j vasrc to keep it separate from my C source (as often the programs would have the same name). And as I learned more about Java, I began to see its advantages for many kinds of work, such as the automatic memory reclaim and the elimination of pointer calculations. The javasrc directory kept growing. I wrote a Java course for Learning Tree, and the directory kept growing faster, reaching the point where it needed subdirectories. Even then, it became increasingly difficult to find things, and it soon became evident that some kind of documentation was needed. In a sense, this book is the result of a high-speed collision between my javasrc directory and a documentation framework established for another newcomer language. In O'Reilly's Perl Cookbook, Tom Christiansen and Nathan Torkington worked out a very successful design, presenting the material in small, focused articles called "recipes." The original model for such a book is, of course, the familiar kitchen cookbook. There is a long history of using the term "cookbook" to refer to an enumeration of how-to recipes relating to computers. On the software side, Donald Knuth applied the "cookbook" analogy to his book The Art of Computer Programming (Addison Wesley), first published in 1968. On the hardware side, Don Lancaster wrote The TTL Cookbook (Sams). (Transistor-t ansistor logic, or TTL, was the small-scale building block of electronic circuits at the time.) Tom and Nathan worked out a successful variation on this, and I recommend their book for anyone who wishes to, as they put it, "learn more Perl." Indeed, the work you are now reading intends to be a book for the person who wishes to "learn more Java." The code in each recipe is intended to be self-contained; feel free to borrow bits and pieces of any of it for use in your own projects. Who This Book Is For I'm going to assume that you know the basics of Java. I won't tell you how to println a string and a number at the same time, or how to write a class that extends Applet and prints your name in the window. I'll presume you've taken a Java course or studied an introductory book such as O'Reilly's Learning Java or Java in a Nutshell. However, Chapter 1 covers some techniques that you might not know very well and that are necessary to understand some of the later material. Feel free to skip around! Both the printed version of the book and the (eventual) electronic copy are heavily cross-referenced. What's in This Book? Unlike my Perl colleagues Tom and Nathan, I don't have to spend as much time on the oddities and idioms of the language; Java is refreshingly free of strange quirks. But that doesn't mean it's trivial to learn well! If it were, there'd be no need for this book. My main approach, then, is to concentrate on the Java APIs: I'll teach you by example what the APIs are and what they are good for. Like Perl, Java is a language that grows on you and with you. And, I confess, I use Java most of the time nowadays. Things I'd once done in C are now -- except for device drivers and legacy systems -- done in Java. But Java is suited to a different range of tasks than Perl. Perl (and other scripting languages such as awk and Python) are particularly suited to the "one-liner" utility task. As Tom and Nathan show, Perl excels at things like printing the 42nd line from a file. While it can certainly do these things, Java, because it is a compiled, object-oriented language, seems more suited to "development in the large" or enterprise applications development. Indeed, much of the API material added in Java 2 was aimed at this type of development. However, I will necessarily illustrate many techniques with shorter examples and even code fragments. Be assured that every line of code you see here has been compiled and run. Many of the longer examples in this book are tools that I originally wrote to automate some mundane task or another. For example, MkIndex (described in Chapter 1) reads the top-level directory of the place where I keep all my Java example source code and builds a browser- friendly index.html file for that directory. For another example, the body of the book itself was partly composed in XML, a recent simplification that builds upon a decade of experience in SGML (the parent standard that led to the tag-based syntax of HTML). It is not clear at this point if XML will primarily be useful as a publishing format or as a data manipulation format, or if its prevalence will further blur that distinction, though it seems that the blurring of distinctions is more likely. However, I used XML here to type in and mark up the original text of some of the chapters of this book. The text was then converted to FrameMaker input by the XmlForm program. This program also handles -- by use of another program, GetMark -- full and partial code insertions from the source directory. XmlForm is discussed in Chapter 21. Let's go over the organization of this book. I start off Chapter 1 by describing some methods of compiling your program on different platforms, running them in different environments (browser, command line, windowed desktop), and debugging. Chapter 2 moves from compiling and running your program to getting it to adapt to the surrounding countryside -- the other programs that live in your computer. The next few chapters deal with basic APIs. Chapter 3 concentrates on on