JAVA: An Introduction to
Problem Solving & Programming, 8th Ed.
By Walter Savitch.
ISBN 01334462033 © 2018 Pearson Education, Inc., Hoboken, NJ.
All Rights Reserved
Listing 9.1 |
import java.util.Scanner; public class GotMilk { public static void main (String [] args) { Scanner keyboard = new Scanner (System.in); System.out.println ("Enter number of donuts:"); int donutCount = keyboard.nextInt (); System.out.println ("Enter number of glasses of milk:"); int milkCount = keyboard.nextInt (); //Dealing with an unusual event without Javas exception //handling features: if (milkCount < 1) { System.out.println ("No milk!"); System.out.println ("Go buy some milk."); } else { double donutsPerGlass = donutCount / (double) milkCount; System.out.println (donutCount + " donuts."); System.out.println (milkCount + " glasses of milk."); System.out.println ("You have " + donutsPerGlass + " donuts for each glass of milk."); } System.out.println ("End of program."); } } |
Listing 9.2 |
import java.util.Scanner; public class ExceptionDemo { public static void main (String [] args) { Scanner keyboard = new Scanner (System.in); try { System.out.println ("Enter number of donuts:"); int donutCount = keyboard.nextInt (); System.out.println ("Enter number of glasses of milk:"); int milkCount = keyboard.nextInt (); if (milkCount < 1) throw new Exception ("Exception: No milk!"); double donutsPerGlass = donutCount / (double) milkCount; System.out.println (donutCount + " donuts."); System.out.println (milkCount + " glasses of milk."); System.out.println ("You have " + donutsPerGlass + " donuts for each glass of milk."); } catch (Exception e) { System.out.println (e.getMessage ()); System.out.println ("Go buy some milk."); } System.out.println ("End of program."); } } |
Listing 9.3 |
import java.util.Scanner; public class ExceptionDemo { public static void main (String [] args) { Scanner keyboard = new Scanner (System.in); try { System.out.println ("Enter number of donuts:"); int donutCount = keyboard.nextInt (); System.out.println ("Enter number of glasses of milk:"); int milkCount = keyboard.nextInt (); // assume user enters positive number of glasses of milk if (milkCount < 1) throw new Exception ("Exception: No milk!"); // milkCount is positive so exception NOT thrown here // flow of control continues to here double donutsPerGlass = donutCount / (double) milkCount; System.out.println (donutCount + " donuts."); System.out.println (milkCount + " glasses of milk."); System.out.println ("You have " + donutsPerGlass + " donuts for each glass of milk."); }// flow of control leaves here // catch is NOT excecuted catch (Exception e) { System.out.println (e.getMessage ()); System.out.println ("Go buy some milk."); } // flow of control comes to here System.out.println ("End of program."); } } |
Listing 9.4 |
import java.util.Scanner; public class ExceptionDemo { public static void main (String [] args) { Scanner keyboard = new Scanner (System.in); try { System.out.println ("Enter number of donuts:"); int donutCount = keyboard.nextInt (); System.out.println ("Enter number of glasses of milk:"); int milkCount = keyboard.nextInt (); // assume user enters 0 for number of glasses of milk if (milkCount < 1) throw new Exception ("Exception: No milk!"); // milkCount is negative so exception IS thrown here // flow of control jumps to catch block // flow of control skips past these lines double donutsPerGlass = donutCount / (double) milkCount; System.out.println (donutCount + " donuts."); System.out.println (milkCount + " glasses of milk."); System.out.println ("You have " + donutsPerGlass + " donuts for each glass of milk."); } // catch is IS excecuted catch (Exception e) { System.out.println (e.getMessage ()); System.out.println ("Go buy some milk."); } // flow of control comes to here after catch block System.out.println ("End of program."); } } |
Listing 9.5 |
public class DivideByZeroException extends Exception { public DivideByZeroException () { super ("Dividing by Zero!"); } public DivideByZeroException (String message) { super (message); } } |
Listing 9.6 |
import java.util.Scanner; public class DivideByZeroDemo { private int numerator; private int denominator; private double quotient; public static void main (String [] args) { DivideByZeroDemo oneTime = new DivideByZeroDemo (); oneTime.doIt (); } public void doIt () { try { System.out.println ("Enter numerator:"); Scanner keyboard = new Scanner (System.in); numerator = keyboard.nextInt (); System.out.println ("Enter denominator:"); denominator = keyboard.nextInt (); if (denominator == 0) throw new DivideByZeroException (); quotient = numerator / (double) denominator; System.out.println (numerator + "/" + denominator + " = " + quotient); } catch (DivideByZeroException e) { System.out.println (e.getMessage ()); giveSecondChance (); } System.out.println ("End of program."); } public void giveSecondChance () { System.out.println ("Try again:"); System.out.println ("Enter numerator:"); Scanner keyboard = new Scanner (System.in); numerator = keyboard.nextInt (); System.out.println ("Enter denominator:"); System.out.println ("Be sure the denominator is not zero."); denominator = keyboard.nextInt (); if (denominator == 0) { System.out.println ("I cannot do division by zero."); System.out.println ("Since I cannot do what you want,"); System.out.println ("the program will now end."); System.exit (0); } quotient = ((double) numerator) / denominator; System.out.println (numerator + "/" + denominator + " = " + quotient); } } |
Listing 9.7 |
import java.util.Scanner; public class DoDivision { private int numerator; private int denominator; private double quotient; public static void main (String [] args) { DoDivision doIt = new DoDivision (); try { doIt.doNormalCase (); } catch (DivideByZeroException e) { System.out.println (e.getMessage ()); doIt.giveSecondChance (); } System.out.println ("End of program."); } public void doNormalCase () throws DivideByZeroException { System.out.println ("Enter numerator:"); Scanner keyboard = new Scanner (System.in); numerator = keyboard.nextInt (); System.out.println ("Enter denominator:"); denominator = keyboard.nextInt (); if (denominator == 0) throw new DivideByZeroException (); quotient = numerator / (double) denominator; System.out.println (numerator + "/" + denominator + " = " + quotient); } } |
Listing 9.8 |
import java.util.Scanner; public class TwoCatchesDemo { public static void main (String [] args) { try { System.out.println ("Enter number of widgets produced:"); Scanner keyboard = new Scanner (System.in); int widgets = keyboard.nextInt (); if (widgets < 0) throw new NegativeNumberException ("widgets"); System.out.println ("How many were defective?"); int defective = keyboard.nextInt (); if (defective < 0) throw new NegativeNumberException ("defective widgets"); double ratio = exceptionalDivision (widgets, defective); System.out.println ("One in every " + ratio + " widgets is defective."); } catch (DivideByZeroException e) { System.out.println ("Congratulations! A perfect record!"); } catch (NegativeNumberException e) { System.out.println ("Cannot have a negative number of " + e.getMessage ()); } System.out.println ("End of program."); } public static double exceptionalDivision (double numerator, double denominator) throws DivideByZeroException { if (denominator == 0) throw new DivideByZeroException (); return numerator / denominator; } } |
Listing 9.9 |
public class NegativeNumberException extends Exception { public NegativeNumberException () { super ("Negative Number Exception!"); } public NegativeNumberException (String message) { super (message); } } |
Listing 9.10 |
public class UnknownOpException extends Exception { public UnknownOpException () { super ("UnknownOpException"); } public UnknownOpException (char op) { super (op + " is an unknown operator."); } public UnknownOpException (String message) { super (message); } } |
Listing 9.11 |
import java.util.Scanner; /** PRELIMINARY VERSION without exception handling. Simple line-oriented calculator program. The class can also be used to create other calculator programs. */ public class PrelimCalculator { private double result; private double precision = 0.0001; //Numbers this close to zero are treated as if equal to zero. public static void main (String [] args) throws DivideByZeroException, UnknownOpException { PrelimCalculator clerk = new PrelimCalculator (); System.out.println ("Calculator is on."); System.out.print ("Format of each line: "); System.out.println ("operator space number"); System.out.println ("For example: + 3"); System.out.println ("To end, enter the letter e."); clerk.doCalculation (); System.out.println ("The final result is " + clerk.resultValue ()); System.out.println ("Calculator program ending."); } public PrelimCalculator () { result = 0; } public void reset () { result = 0; } public void setResult (double newResult) { result = newResult; } public double getResult () { return result; } /** Returns n1 op n2, provided op is one of '+', '', '*',or '/'. Any other value of op throws UnknownOpException. */ public double evaluate (char op, double n1, double n2) throws DivideByZeroException, UnknownOpException { double answer; switch (op) { case '+': answer = n1 + n2; break; case '-': answer = n1 - n2; break; case '*': answer = n1 * n2; break; case '/': if ((-precision < n2) && (n2 < precision)) throw new DivideByZeroException (); answer = n1 / n2; break; default: throw new UnknownOpException (op); } return answer; } public void setResult (double newResult) { result = newResult; } public double getResult () { return result; } /** Returns n1 op n2, provided op is one of '+', '', '*',or '/'. Any other value of op throws UnknownOpException. */ public double evaluate (char op, double n1, double n2) throws DivideByZeroException, UnknownOpException { double answer; switch (op) { case '+': answer = n1 + n2; break; case '-': answer = n1 - n2; break; case '*': answer = n1 * n2; break; case '/': if ((-precision < n2) && (n2 < precision)) throw new DivideByZeroException (); answer = n1 / n2; break; default: throw new UnknownOpException (op); } return answer; } public void doCalculation () throws DivideByZeroException, UnknownOpException { Scanner keyboard = new Scanner (System.in); boolean done = false; result = 0; System.out.println ("result = " + result); while (!done) { char nextOp = (keyboard.next ()).charAt (0); if ((nextOp == 'e') || (nextOp == 'E')) done = true; else { double nextNumber = keyboard.nextDouble (); result = evaluate (nextOp, result, nextNumber); System.out.println ("result " + nextOp + " " + nextNumber + " = " + result); System.out.println ("updated result = " + result); } } } } |
Listing 9.12 |
import java.util.Scanner; /** Simple line-oriented calculator program. The class can also be used to create other calculator programs. */ public class Calculator { private double result; private double precision = 0.0001; //Numbers this close to zero are treated as if equal to zero. public static void main (String [] args) { Calculator clerk = new Calculator (); try { System.out.println ("Calculator is on."); System.out.print ("Format of each line: "); System.out.println ("operator space number"); System.out.println ("For example: + 3"); System.out.println ("To end, enter the letter e."); clerk.doCalculation (); } catch (UnknownOpException e) { clerk.handleUnknownOpException (e); } catch (DivideByZeroException e) { clerk.handleDivideByZeroException (e); } System.out.println ("The final result is " + clerk.resultValue ()); System.out.println ("Calculator program ending."); } public Calculator () { result = 0; } public void handleDivideByZeroException (DivideByZeroException e) { System.out.println ("Dividing by zero."); System.out.println ("Program aborted"); System.exit (0); } public void handleUnknownOpException (UnknownOpException e) { System.out.println (e.getMessage ()); System.out.println ("Try again from the beginning:"); try { System.out.print ("Format of each line: "); System.out.println ("operator number"); System.out.println ("For example: + 3"); System.out.println ("To end, enter the letter e."); doCalculation (); } catch (UnknownOpException e2) { System.out.println (e2.getMessage ()); System.out.println ("Try again at some other time."); System.out.println ("Program ending."); System.exit (0); } catch (DivideByZeroException e3) { handleDivideByZeroException (e3); } } //The methods reset, setResult, getResult, evaluate, and doCalculation //are the same as in Listing 9.11. } |
Listing 9.13 |
import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.layout.VBox; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; import javafx.scene.control.Spinner; import javafx.scene.control.SpinnerValueFactory; import javafx.scene.control.ChoiceBox; import javafx.collections.FXCollections; import javafx.scene.control.Label; import javafx.event.ActionEvent; import javafx.event.EventHandler; /** Simple demonstration of some additional JavaFX UI controls. */ public class AdditionalControlsDemo extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { VBox root = new VBox(); // Demonstrate radio buttons root.getChildren().add(new Label("Select pizza crust")); ToggleGroup toggleCrust = new ToggleGroup(); RadioButton rbHand = new RadioButton("Hand tossed"); rbHand.setToggleGroup(toggleCrust); rbHand.setSelected(true); RadioButton rbDeepDish = new RadioButton("Deep dish"); rbDeepDish.setToggleGroup(toggleCrust); root.getChildren().add(rbHand); root.getChildren().add(rbDeepDish); // Demonstrate checkboxes root.getChildren().add(new Label("Select pizza toppings")); CheckBox cbCheese = new CheckBox("Extra cheese"); CheckBox cbPepperoni = new CheckBox("Pepperoni"); CheckBox cbMushrooms = new CheckBox("Mushrooms"); root.getChildren().add(cbCheese); root.getChildren().add(cbPepperoni); root.getChildren().add(cbMushrooms); // Demonstrate Spinner with integer values from 1-10 root.getChildren().add(new Label("Select quantity")); Spinner<Integer> spinnerQuantity = new Spinner |
Listing 9.14 |
import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.layout.VBox; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.scene.paint.Color; /** Demonstration of some shapes and an image within a VBox layout. */ public class ImageShapeDemo extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { VBox root = new VBox(); ImageView imv = new ImageView(); // Java looks for "java.jpg" in the default folder Image img = new Image("java.jpg"); imv.setImage(img); Circle c = new Circle(); c.setRadius(25); c.setFill(Color.PINK); Rectangle r = new Rectangle(); r.setWidth(100); r.setHeight(50); r.setFill(Color.BLUE); root.getChildren().add(imv); root.getChildren().add(c); root.getChildren().add(r); Scene scene = new Scene(root, 300, 200); primaryStage.setTitle("Image and Shape Demo"); primaryStage.setScene(scene); primaryStage.show(); } } |
Listing 9.15 |
import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.Group; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import javafx.scene.input.MouseEvent; import javafx.event.EventHandler; import java.util.Random; /** This program draws a circle of random color at the location of the mouse whenever the mouse moves. */ public class MousePaint extends Application { private Random rnd = new Random(); public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) throws Exception { Group root = new Group(); Canvas canvas = new Canvas(650, 600); GraphicsContext gc = canvas.getGraphicsContext2D(); // When the mouse is pressed erase the // screen by drawing a white rectangle on the // entire canvas canvas.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { gc.setFill(Color.WHITE); gc.fillRect(0,0,canvas.getWidth(),canvas.getHeight()); } }); // When the mouse is moved get a random color // and draw a circle at the mouse's coordinates canvas.setOnMouseMoved(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { // Get a random color gc.setFill(Color.rgb(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255))); gc.fillOval(event.getX(),event.getY(),100,100); } }); root.getChildren().add(canvas); primaryStage.setScene(new Scene(root)); primaryStage.setTitle("Mouse Paint"); primaryStage.show(); } } |
Listing 9.16 |
import javafx.application.Application; import javafx.scene.canvas.Canvas; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.input.MouseEvent; import javafx.event.EventHandler; import javafx.scene.shape.Circle; /** This program sets the X/Y coordinates of a Circle to the location of the mouse. */ public class MouseCircle extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) throws Exception { Pane root = new Pane(); root.setPrefSize(400,400); Circle circle = new Circle(); circle.setRadius(30); circle.setFill(Color.RED); root.setOnMouseMoved(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { circle.setCenterX(event.getX()); circle.setCenterY(event.getY()); } }); root.getChildren().add(circle); primaryStage.setScene(new Scene(root)); primaryStage.setTitle("Mouse Circle"); primaryStage.show(); } } |
Listing 9.17 |
import javafx.scene.shape.Circle; import javafx.scene.paint.Color; import java.util.Random; public class Ball extends Circle { private static final int RADIUS = 30; private int x,y; private int xVel, yVel; public Ball() { Random rnd = new Random(); setRadius(RADIUS); setFill(Color.RED); x = 50; y = 50; xVel = rnd.nextInt(20) + 5; yVel = rnd.nextInt(20) + 5; } public void updateLocation() { x += xVel; y += yVel; setCenterX(x); setCenterY(y); } public int getX() { return x; } public int getY() { return y; } public void reverseX() { xVel *= -1; } public void reverseY() { yVel *= -1; } } |
Listing 9.18 |
import javafx.application.Application; import javafx.scene.canvas.Canvas; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.layout.Pane; import javafx.event.EventHandler; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.util.Duration; import javafx.event.ActionEvent; /** This program animates a red ball within The window. */ public class BounceBall extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) throws Exception { Pane root = new Pane(); root.setPrefSize(400,400); Ball ball = new Ball(); // Timeline to call the event handler every 10ms // to update a bouncing ball Timeline timeline = new Timeline( new KeyFrame(Duration.millis(10), new EventHandler |
Listing 10.1 |
import java.io.PrintWriter; import java.io.FileNotFoundException; import java.util.Scanner; public class TextFileOutputDemo { public static void main (String [] args) { String fileName = "out.txt"; //The name could be read from //the keyboard. PrintWriter outputStream = null; try { outputStream = new PrintWriter (fileName); } catch (FileNotFoundException e) { System.out.println ("Error opening the file " + fileName); System.exit (0); } System.out.println ("Enter three lines of text:"); Scanner keyboard = new Scanner (System.in); for (int count = 1 ; count <= 3 ; count++) { String line = keyboard.nextLine (); outputStream.println (count + " " + line); } outputStream.close (); System.out.println ("Those lines were written to " + fileName); } } |
Listing 10.2 |
import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class TextFileInputDemo { public static void main (String [] args) { String fileName = "out.txt"; Scanner inputStream = null; System.out.println ("The file " + fileName + "\ncontains the following lines:\n"); try { inputStream = new Scanner (new File (fileName)); } catch (FileNotFoundException e) { System.out.println ("Error opening the file " + fileName); System.exit (0); } while (inputStream.hasNextLine ()) { String line = inputStream.nextLine (); System.out.println (line); } inputStream.close (); } } |
Listing 10.3 |
import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class TextFileInputDemo2 { public static void main (String [] args) { System.out.print ("Enter file name: "); Scanner keyboard = new Scanner (System.in); String fileName = keyboard.next (); Scanner inputStream = null; System.out.println ("The file " + fileName + "\n" + "contains the following lines:\n"); try { inputStream = new Scanner (new File (fileName)); } catch (FileNotFoundException e) { System.out.println ("Error opening the file " + fileName "); System.exit (0); } while (inputStream.hasNextLine ()) { String line = inputStream.nextLine (); System.out.println (line); } inputStream.close (); } } |
Listing 10.4 |
File: Transactions.txt SKU,Quantity,Price,Description 4039,50,0.99,SODA 9100,5,9.50,T-SHIRT 1949,30,110.00,JAVA PROGRAMMING TEXTBOOK 5199,25,1.50,COOKIE import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.File; import java.util.Scanner; public class TransactionReader { public static void main(String[] args) { String fileName = "Transactions.txt"; try { Scanner inputStream = new Scanner(new File(fileName)); // Read the header line String line = inputStream.nextLine(); // Total sales double total = 0; // Read the rest of the file line by line while (inputStream.hasNextLine()) { // Contains SKU,Quantity,Price,Description line = inputStream.nextLine(); // Turn the string into an array of strings String[] ary = line.split(","); // Extract each item String SKU = ary[0]; int quantity = Integer.parseInt(ary[1]); double price = Double.parseDouble(ary[2]); String description = ary[3]; // Output item System.out.printf("Sold %d of %s (SKU: %s) at $%1.2f each.\n", quantity, description, SKU, price); // Compute total total += quantity * price; } System.out.printf("Total sales: $%1.2f\n",total); inputStream.close( ); } catch(FileNotFoundException e) { System.out.println("Cannot find file " + fileName); } catch(IOException e) { System.out.println("Problem with input from file " + fileName); } } } |
Listing 10.5 |
import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; public class BinaryOutputDemo { public static void main (String [] args) { String fileName = "numbers.dat"; try { ObjectOutputStream outputStream = new ObjectOutputStream (new FileOutputStream (fileName)); Scanner keyboard = new Scanner (System.in); System.out.println ("Enter nonnegative integers."); System.out.println ("Place a negative number at the end."); int anInteger; do { anInteger = keyboard.nextInt (); outputStream.writeInt (anInteger); } while (anInteger >= 0); System.out.println ("Numbers and sentinel value"); System.out.println ("written to the file " + fileName); outputStream.close (); } catch (FileNotFoundException e) { System.out.println ("Problem opening the file " + fileName); } catch (IOException e) { System.out.println ("Problem with output to file " + fileName); } } } |
Listing 10.6 |
import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.EOFException; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; public class BinaryInputDemo { public static void main (String [] args) { String fileName = "numbers.dat"; try { ObjectInputStream inputStream = new ObjectInputStream (new FileInputStream (fileName)); System.out.println ("Reading the nonnegative integers"); System.out.println ("in the file " + fileName); int anInteger = inputStream.readInt (); while (anInteger >= 0) { System.out.println (anInteger); anInteger = inputStream.readInt (); } System.out.println ("End of reading from file."); inputStream.close (); } catch (FileNotFoundException e) { System.out.println ("Problem opening the file " + fileName); } catch (EOFException e) { System.out.println ("Problem reading the file " + fileName); System.out.println ("Reached end of the file."); } catch (IOException e) { System.out.println ("Problem eading the file " + fileName); } } } |
Listing 10.7 |
import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.EOFException; import java.io.FileNotFoundException; import java.io.IOException; public class EOFExceptionDemo { public static void main (String [] args) { String fileName = "numbers.dat"; try { ObjectInputStream inputStream = new ObjectInputStream (new FileInputStream (fileName)); System.out.println ("Reading ALL the integers"); System.out.println ("in the file " + fileName); try { while (true) { int anInteger = inputStream.readInt (); System.out.println (anInteger); } } catch (EOFException e) { System.out.println ("End of reading from file."); } inputStream.close (); } catch (FileNotFoundException e) { System.out.println ("Cannot find file " + fileName); } catch (IOException e) { System.out.println ("Problem with input from file " + fileName); } } } |
Listing 10.8 |
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.EOFException; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; public class Doubler { private ObjectInputStream inputStream = null; private ObjectOutputStream outputStream = null; /** Doubles the integers in one file and puts them in another file. */ public static void main (String [] args) { Doubler twoTimer = new Doubler (); twoTimer.connectToInputFile (); twoTimer.connectToOutputFile (); twoTimer.timesTwo (); twoTimer.closeFiles (); System.out.println ("Numbers from input file"); System.out.println ("doubled and copied to output file."); } public void connectToInputFile () { String inputFileName = getFileName ("Enter name of input file:"); try { inputStream = new ObjectInputStream ( new FileInputStream (inputFileName)); } catch (FileNotFoundException e) { System.out.println ("File " + inputFileName + " not found."); System.exit (0); } catch (IOException e) { System.out.println ("Error opening input file " + inputFileName); System.exit (0); } } private String getFileName (String prompt) { String fileName = null; System.out.println (prompt); Scanner keyboard = new Scanner (System.in); fileName = keyboard.next (); return fileName; } public void connectToOutputFile () { String outputFileName = getFileName ("Enter name of output file:"); try { outputStream = new ObjectOutputStream ( new FileOutputStream (outputFileName)); } catch (IOException e) { System.out.println ("Error opening output file " + outputFileName); System.out.println (e.getMessage ()); System.exit (0); } } public void timesTwo () { try { while (true) { int next = inputStream.readInt (); outputStream.writeInt (2 * next); } } catch (EOFException e) { //Do nothing. This just ends the loop. } catch (IOException e) { System.out.println ( "Error: reading or writing files."); System.out.println (e.getMessage ()); System.exit (0); } } public void closeFiles () { try { inputStream.close (); outputStream.close (); } catch (IOException e) { System.out.println ("Error closing files " + e.getMessage ()); System.exit (0); } } } |
Listing 10.9 |
import java.io.Serializable; import java.util.Scanner; /** Serialized class for data on endangered species. */ public class Species implements Serializable { private String name; private int population; private double growthRate; public Species () { name = null; population = 0; growthRate = 0; } public Species (String initialName, int initialPopulation, double initialGrowthRate) { name = initialName; if (initialPopulation >= 0) population = initialPopulation; else { System.out.println ("ERROR: Negative population."); System.exit (0); } growthRate = initialGrowthRate; } public String toString () { return ("Name = " + name + "\n" + "Population = " + population + "\n" + "Growth rate = " + growthRate + "%"); } //Other methods are the same as those in Listing 5.17 of Chapter 5, //but they are not needed for the discussion in this chapter. } |
Listing 10.10 |
import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ClassObjectIODemo { public static void main (String [] args) { ObjectOutputStream outputStream = null; String fileName = "species.records"; try { outputStream = new ObjectOutputStream ( new FileOutputStream (fileName)); } catch (IOException e) { System.out.println ("Error opening output file " + fileName + "."); System.exit (0); } Species califCondor = new Species ("Calif. Condor", 27, 0.02); Species blackRhino = new Species ("Black Rhino", 100, 1.0); try { outputStream.writeObject (califCondor); outputStream.writeObject (blackRhino); outputStream.close (); } catch (IOException e) { System.out.println ("Error writing to file " + fileName + "."); System.exit (0); } System.out.println ("Records sent to file " + fileName + "."); System.out.println ( "Now let's reopen the file and echo the records."); ObjectInputStream inputStream = null; try { inputStream = new ObjectInputStream ( new FileInputStream ("species.records")); } catch (IOException e) { System.out.println ("Error opening input file " + fileName + "."); System.exit (0); } Species readOne = null, readTwo = null; try { readOne = (Species) inputStream.readObject (); readTwo = (Species) inputStream.readObject (); inputStream.close (); } catch (Exception e) { System.out.println ("Error reading from file " + fileName + "."); System.exit (0); } System.out.println ("The following were read\n" + "from the file " + fileName + "."); System.out.println (readOne); System.out.println (); System.out.println (readTwo); System.out.println ("End of program."); } } |
Listing 10.11 |
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ArrayIODemo { public static void main (String [] args) { Species [] oneArray = new Species [2]; oneArray [0] = new Species ("Calif. Condor", 27, 0.02); oneArray [1] = new Species ("Black Rhino", 100, 1.0); String fileName = "array.dat"; try { ObjectOutputStream outputStream = new ObjectOutputStream ( new FileOutputStream (fileName)); outputStream.writeObject (oneArray); outputStream.close (); } catch (IOException e) { System.out.println ("Error writing to file " + fileName + "."); System.exit (0); } System.out.println ("Array written to file " + fileName + " and file is closed."); System.out.println ("Open the file for input and " + "echo the array."); Species [] anotherArray = null; try { ObjectInputStream inputStream = new ObjectInputStream ( new FileInputStream (fileName)); anotherArray = (Species []) inputStream.readObject (); inputStream.close (); } catch (Exception e) { System.out.println ("Error reading file " + fileName + . ); System.exit (0); } System.out.println ("The following were read from " + "the file " + fileName + ":"); for (int i = 0 ; i < anotherArray.length ; i++) { System.out.println (anotherArray [i]); System.out.println (); } System.out.println ("End of program."); } } |
Listing 10.12 |
import java.util.Scanner; import java.io.InputStreamReader; import java.io.DataOutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.ServerSocket; public class SocketServer { public static void main(String[] args) { String s; Scanner inputStream = null; PrintWriter outputStream = null; ServerSocket serverSocket = null; try { // Wait for connection on port 6789 System.out.println("Waiting for a connection."); serverSocket = new ServerSocket(6789); Socket socket = serverSocket.accept(); // Connection made, set up streams inputStream = new Scanner(new InputStreamReader(socket.getInputStream())); outputStream = new PrintWriter(new DataOutputStream(socket.getOutputStream())); // Read a line from the client s = inputStream.nextLine(); // Output text to the client outputStream.println("Well, "); outputStream.println(s + " is a fine programming language!"); outputStream.flush(); System.out.println("Closing connection from " + s); inputStream.close(); outputStream.close(); } catch (Exception e) { // If any exception occurs, display it System.out.println("Error " + e); } } } |
Listing 10.13 |
import java.util.Scanner; import java.io.InputStreamReader; import java.io.DataOutputStream; import java.io.PrintWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) { String s; Scanner inputStream = null; PrintWriter outputStream = null; try { // Connect to server on same machine, port 6789 Socket clientSocket = new Socket("localhost",6789); // Set up streams to send/receive data inputStream = new Scanner(new InputStreamReader(clientSocket.getInputStream())); outputStream = new PrintWriter(new DataOutputStream(clientSocket.getOutputStream())); // Send "Java" to the server outputStream.println("Java"); outputStream.flush(); // Sends data to the stream // Read everything from the server until no more lines // and output it to the screen while (inputStream.hasNextLine()) { s = inputStream.nextLine(); System.out.println(s); } inputStream.close(); outputStream.close(); } catch (Exception e) { // If any exception occurs, display it System.out.println("Error " + e); } } } |
Listing 10.14 |
import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.layout.FlowPane; import javafx.scene.control.TextField; import javafx.scene.control.Label; import javafx.scene.control.Button; import javafx.event.ActionEvent; import javafx.event.EventHandler; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class FileOrganizer extends Application { private TextField fileNameField; private TextField firstLineField; public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { final int WIDTH = 400; final int HEIGHT = 300; final int NUMBER_OF_PIXELS = 300; FlowPane root = new FlowPane(); Button showButton = new Button("Show first line"); root.getChildren().add(showButton); showButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { showFirstLine(); } } ); Button removeButton = new Button("Remove file"); root.getChildren().add(removeButton); removeButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { removeFile(); } } ); Button resetButton = new Button("Reset"); root.getChildren().add(resetButton); resetButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { resetFields(); } } ); fileNameField = new TextField("Enter file name here."); fileNameField.setPrefWidth(NUMBER_OF_PIXELS); root.getChildren().add(fileNameField); firstLineField = new TextField(); firstLineField.setPrefWidth(NUMBER_OF_PIXELS); root.getChildren().add(firstLineField); Scene scene = new Scene(root, WIDTH, HEIGHT); primaryStage.setTitle("File Organizer"); primaryStage.setScene(scene); primaryStage.show(); } private void showFirstLine( ) { Scanner fileInput = null; String fileName = fileNameField.getText( ); File fileObject = new File(fileName); if (!fileObject.exists( )) firstLineField.setText("No such file"); else if (!fileObject.canRead( )) firstLineField.setText("That file is not readable."); else { try { fileInput = new Scanner(fileObject); } catch(FileNotFoundException e) { firstLineField.setText("Error opening the file " + fileName); } String firstLine = fileInput.nextLine( ); firstLineField.setText(firstLine); fileInput.close( ); } } private void resetFields() { fileNameField.setText("Enter file name here."); firstLineField.setText(""); } private void removeFile( ) { Scanner fileInput = null; String firstLine; String fileName = fileNameField.getText( ); File fileObject = new File(fileName); if (!fileObject.exists( )) firstLineField.setText("No such file"); else if (!fileObject.canWrite( )) firstLineField.setText("Permission denied."); else { if (fileObject.delete( )) firstLineField.setText("File deleted."); else firstLineField.setText("Could not delete file."); } } } |