Standard Libraries


Standard libraries.

Below is a table of the input and output libraries that we use throughout the textbook and beyond.


§ PROGRAM DESCRIPTION / JAVADOC
1.5 StdIn.java read numbers and text from standard input
1.5 StdOut.java write numbers and text to standard output
1.5 StdDraw.java draw geometric shapes in a window
1.5 StdAudio.java create, play, and manipulate sound
2.2 StdRandom.java generate random numbers
2.2 StdStats.java compute statistics
2.2 StdArrayIO.java read and write 1D and 2D arrays
3.1 In.java read numbers and text from files and URLs
3.1 Out.java write numbers and text to files
3.1 Draw.java draw geometric shapes
3.1 Picture.java process digital images
3.2 Stopwatch.java measure running time
BinaryStdIn.java read bits from standard input
BinaryStdOut.java write bits to standard output
BinaryIn.java read bits from files and URLs
BinaryOut.java write bits to files
StdDraw3D.java 3D graphics



Using the standard libraries.

The file stdlib.jar bundles together all of our standard libraries into one file. There are a number of ways to access the libraries:


Standard input and standard output.

StdIn.java and StdOut.java are libraries for reading in numbers and text from standard input and printing out numbers and text to standard output. Our versions have a simpler interface than the corresponding Java ones (and provide a few tecnical improvements). Average.java reads in a sequence of real numbers from standard input and prints their average on standard output.
% java Average
10.0 5.0 6.0 3.0 7.0 32.0
3.14 6.67 17.71
<Ctrl-d>
Average is 10.05777777777778
In.java and Out.java are object-oriented versions that support multiple input and output streams, including reading from a file or URL and writing to a file. Wget.java reads in data from the URL specified on the command line and save it in a file with the same name.
% java Wget http://www.cs.princeton.edu/IntroProgramming/datafiles/codes.csv
% more codes.csv
United States,USA,00
Alabama,AL,01
Alaska,AK,02
...


Binary standard input and standard output.

BinaryStdIn.java and BinaryStdOut.java are the analogs for binary data. Copy.java reads a binary file from standard input and writes it to standard output.
% java Copy < mandrill.jpg > copy.jpg
% diff mandrill.jpg copy.jpg


Standard drawing.

StdDraw.java is an easy-to-use library for drawing geometric shapes, such as points, lines, and circles. RightTriangle.java draws a right triangle and a circumscribing circle.

  % java RightTriangle
right triangle and circumscribing circle

BouncingBall.java illustrates how to produce an animation using standard drawing.

Your browser can not display this movie.
Be sure that Javascript is enabled and that you have Flash 9.0.124 or better.


Draw.java is an object-oriented versions that support drawing in multiple windows.


Standard audio.

StdAudio.java is an easy-to-use library for synthesizing sound. Tone.java reads in a frequency and duration from the command line, and it sonifies a sine wave of the given frequency for the given duration.
% java Tone 440.0 3.0








Image processing.

Picture.java is an easy-to-use library for image processing. Scale.java takes the name of a picture file and two integers (width w and height h) as command-line arguments and scales the image to w-by-h.

% java Scale mandrill.jpg 298 298
298-by-298
% java Scale mandrill.jpg 200 200
200-by-400
% java Scale mandrill.jpg 200 400
200-by-400


Q + A

Q. Can I use your code in my project?

A. Our libraries stdlib.jar and algs4.jar are released under the GNU General Public License, version 3 (GPLv3). If you wish to license the code under different terms, please contact our publisher to discuss.

Q. If I use a named package to structure my code, the compiler can no longer access the libraries in stdlib.jar. Why not?

A. The libraries in stdlib.jar are in the "default" package. In Java, you can't access classes in the default package from a named package. If you need to use our libraries with a named package, you can use the packaged version stdlib-package.jar.

Warning: if you are taking Princeton COS 126, you must use the default package verison of our libraries to facilitate grading.