slides

advertisement
Java I/O using Scanner, Files
For CS2110, SW Development Methods.
Topics:
 I/O Streams
 Scanner class
 Reading from Files and Strings
 Reminder slides
Adopted from slides for:
CS 101, Chapter 2, Spring 2005
Aaron Bloomfield
1
What is the object System.out?
System.out : PrintStream
- destination =
- ...
+ println(String s) : void
+ print(String s) : void
+ ...
Variable System.out gives
access to an output stream
of type PrintStream
The printing destination attribute
for this PrintStream object is the
console window
The behaviors of a PrintStream
object support a high-level view of
printing
2
Selection
The period indicates that we want to select an
individual class member of System
The period indicates that we want to
select an individual class member of out
The method we are calling
System
.
out
.
print
(
" string "
)
Member out of System is an output
Literal character string that is
stream object automatically
the parameter to print().
associated with the console window
running the application
Class System is defined
in the standard
Method member of out. The execution of member print()
package java.lang
causes its parameter to be displayed to the output stream
3
I/O streams
 System.out
 Prints to standard output
 Equivalent to cout in C++, and print() in C
 System.err
 Prints to standard error
 Equivalent to cerr in C++, and fprintf(stderr) in C
 System.in
 Reads from standard input
 Equivalent to cin in C++, and scanf() in C
4
Support for interactive console programs
 Variable System.in
 Associated with the standard input stream – the keyboard
 Class Scanner
 Makes obtaining input from the keyboard easy
Scanner stdin = new Scanner (System.in);
stdin : Scanner
- source =
- ...
Variable stdin gives Scanner
access to an input stream
Input source attribute for this
Scanner is the keyboard
+ nextDouble() : double
+ ...
Behaviors of a Scanner support
high-level view of inputting text
5
How to make Java work with the Scanner
class
 In Java 1.5 and later, do a:
import java.util.*;
 To create a new Scanner (for the keyboard):
Scanner stdin = new Scanner (System.in);
 Do NOT use the following (it won’t work):
Scanner stdin = Scanner.create (System.in);
 This was correct for a short-time in the beta of Java 5.0,
but was dropped in the final version.
 Java API Documentation for Scanner:
http://download.oracle.com/javase/6/docs/api/java/util/Scanner.
6
html
Scanner API
public Scanner(InputStream in)
// Scanner(): constructor for reading from a
// InputStream
public Scanner(File f)
// Scanner(): constructor to read from a file object
public Scanner(String s)
// Scanner(): constructor to scan from a string
public int nextInt()
// nextInt(): next input value as an int
public short nextShort()
// nextShort(): next input value as a short
public long nextLong()
// nextLong(): next input value as a long
public double nextDouble()
// nextDouble(): next next input value as a double
public float nextFloat()
// nextFloat(): next next input value as a float
public String next()
// next(): get next whitespace-free string
public String nextLine()
// nextLine(): return contents of input line buffer
public boolean hasNext()
// hasNext(): is there a value to next
7
A Simple Example
import java.util.*;
public class MathFun {
public static void main(String[] args) {
// set up the Scanner object
Scanner stdin = new Scanner(System.in);
// have the user input the values for x and y
System.out.print("Enter a decimal number: ");
double x = stdin.nextDouble();
System.out.print("Enter another decimal number: ");
double y = stdin.nextDouble();
double squareRootX = Math.sqrt(x);
System.out.println ("Square root of " + x + " is "
+ squareRootX);
}
}
8
Typical Use of Scanner
 Construct a scanner object
 Use hasNext() to see if possible to read next item
 Get the item with one of the “next” methods
 Repeat as necessary
 Example: read all input until “end of file” or “end of input”
Scanner theInput = new Scanner( some-argument );
while ( theInput.hasNext() ) {
String token = theInput.next();
// do something with the String you just read
}
 Note we could have called any of the “next methods”
 Sometimes you must make sure there’s something to read
before reading:
if ( theInput.hasNext() ) anInt = theInput.nextInt();
9
You Can “Read” from Strings
 When you create a scanner object, you can associate it with a
String object
 Pass a String to the constructor
 Allows you to extract or scan values of various types from
a string
 Very useful!
 Could you write this code?
 Read an entire line from the input
 Then, read each item in that line
 Hint: need loop like the previous page, nextLine() and a
second loop using a second scanner
10
You Can Read from a File Instead of the
Keyboard
 When you create a scanner object, associate it with a File
object instead of System.in
 The Java type File is an object that represents a file on
disk
 Need to have: import java.io.*;
 Create a Java File object that’s linked to a disk-file:
 Pass the File constructor a String containing the file-name
and pathBut, this may fail!
 Bad file-name
 File not available for reading
11
Catching Exceptions when Opening a File
 The File constructor may throw an exception
 Exception is a Java object created when an error occurs
 Handle this with a try-catch block
 try { … } surrounds the code that might throw the
exception
 catch (Exception e) { … } follows the try-block and
contains code to be executed if an exception of type
Exception just occurred
 Follow this example when opening a file:
String fname = "mydata.txt";
try {
Scanner myInput = new Scanner( new File(fname) );
}
catch (Exception e) {
System.out.println("Error: Cannot open file: " + fname);
12
}
Some Reminder Slides
 Here are some additional slides from that lecture in CS101
 You may know all the following
 But maybe a quick review won’t hurt
13
System.out.println()
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println("
Thomas Watson, IBM, 1943.");
}
 Class System supplies objects that can print and read values
 System variable out references the standard printing object
 Known as the standard output stream
 Variable out provides access to printing methods
 print(): displays a value
 println(): displays a value and moves cursor to the next
line
14
Escape sequences
 Java provides escape sequences
characters
 \b
backspace
 \n
newline
 \t
tab
 \r
carriage return
 \\
backslash
 \"
double quote
 \'
single quote
for
printing
special
15
Escape sequences
 What do these statements output?
System.out.println("Person\tHeight\tShoe size");
System.out.println("=========================");
System.out.println("Hannah\t5‘1\"\t7");
System.out.println("Jenna\t5'10\"\t9");
System.out.println("JJ\t6'1\"\t14");
 Output
Person Height Shoe size
=========================
Hannah 5‘1"
7
Jenna
5'10"
9
JJ
6'1"
14
16
Casting
 Consider the following code
double d = 3.6;
int x = Math.round(d);
 Java complains (about loss of precision). Why?
 Math.round() returns a long, not an int
 So this is forcing a long value into an int variable
 How to fix this
double d = 3.6;
int x = (int) Math.round(d);
 You are telling Java that it is okay to do this
 This is called “casting”
 The type name is in parenthesis
17
More casting examples
 Consider
double d = 3.6;
int x = (int) d;
 At this point, x holds 3 (not 4!)
 This truncates the value!
 Consider
int x = 300;
byte b = (byte) x;
System.out.println (b);
 What gets printed?
 Recall that a byte can hold values -128 to 127
 44!
 This is the “loss of precision”
18
Download