winter 2006cisc121 - prof. mcleod1 last time misc. useful classes in java: –string...
TRANSCRIPT
Winter 2006 CISC121 - Prof. McLeod 1
Last Time
• Misc. useful classes in Java:– String– StringTokenizer– Math– System
Winter 2006 CISC121 - Prof. McLeod 2
Stuff…
• Assignment 1 is posted (finally!).
Winter 2006 CISC121 - Prof. McLeod 3
Today
• Wrapper classes
• JFileChooser
• Text File I/O
• The File class
Winter 2006 CISC121 - Prof. McLeod 4
Wrapper Classes
• Sometimes it is necessary for a primitive type value to be an Object, rather than just a primitive type.– Some data structures only store Objects.– Some Java methods only work on Objects.
• Wrapper classes also contain some useful constants and a few handy methods.
Winter 2006 CISC121 - Prof. McLeod 5
Wrapper Classes - Cont.
• Each primitive type has an associated wrapper class:
• Each wrapper class Object can hold the value that would normally be contained in the primitive type variable, but now has a number of useful static methods.
char Character
int Integer
long Long
float Float
double Double
Winter 2006 CISC121 - Prof. McLeod 6
Integer Wrapper Class - Example
Integer number = new Integer(46);//”Wrapping”
Integer num = new Integer(“908”);
Integer.MAX_VALUE // gives maximum integer
Integer.MIN_VALUE // gives minimum integer
Integer.parseInt(“453”) // returns 453
Integer.toString(653) // returns “653”
number.equals(num) // returns false
int aNumber = number.intValue(); // aNumber is 46
Winter 2006 CISC121 - Prof. McLeod 7
Aside - Why an “equals” Method for Objects?
• The String class also has “equals” and “equalsIgnoreCase”.
• These wrapper classes also have an equals method.
• Why not use the simple boolean comparators (==, !=, etc.) with Objects?
• These comparators just compare memory addresses.
• How are you going to sort Objects?
Winter 2006 CISC121 - Prof. McLeod 8
Aside - Why an “equals” Method for Objects?, Cont.
• == can only compare memory addresses when Objects are compared.
• Most Data Container Objects will have both an equals method and a compareTo method.
• The equals method tests for equality using whatever you define as “equal”.
• The compareTo method returns a postive or negative int value (or zero to indicate “equal”), again depending on how you define one Object to be greater or less than another.
Winter 2006 CISC121 - Prof. McLeod 9
Wrapper Classes – Cont.
• The Double wrapper class has equivalent methods:
Double.MAX_VALUE // gives maximum double value
Double.MIN_VALUE // gives minimum double value
Double.parseDouble(“0.45E-3”) // returns 0.45E-3
• parseDouble is only available in Java 2 and newer versions.
• See the Java documentation for more on Wrapper classes.
Winter 2006 CISC121 - Prof. McLeod 10
Character Wrapper Class
• Many useful methods to work on characters:• “character” is a char
• getNumericValue(character)• isDigit(character)• isLetter(character)• isLowerCase(character)• isUpperCase(character)• toLowerCase(character)• toUpperCase(character)
Winter 2006 CISC121 - Prof. McLeod 11
Built - In GUI Windows
• We will learn to build our own GUI windows, but you should be aware of the GUI Windows already built into Java:
– JOptionPane– JColorChooser– JFileChooser
• These are all built to perform common tasks and are very easy to use.
• Imported from the javax.swing package.• See “BuiltInDemo.java”.
Winter 2006 CISC121 - Prof. McLeod 12
JFileChooser
• A built in file browser/selector dialog box.• The demo only used the chooser in the most
simple way.• For example, you can specify a starting folder and
add as many file extension filters as you like.• The chooser returns a File object, from which
you can obtain much information about the file.
Winter 2006 CISC121 - Prof. McLeod 13
JFileChooser Window
Winter 2006 CISC121 - Prof. McLeod 14
JFileChooser Example Code
• (At the top:
– import java.swing.JFileChooser;)
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION)
System.out.println(chooser.getSelectedFile());
Winter 2006 CISC121 - Prof. McLeod 15
JFileChooser, Cont.
• Upon completion of the dialog, the getSelectedFile() method returns a File object.
• This object can easily be used with file I/O code…
Winter 2006 CISC121 - Prof. McLeod 16
Simple Alternative
• Prompt the user for a filename as a String, using the console window.
Winter 2006 CISC121 - Prof. McLeod 17
File I/O
• Files provide a convenient way to store and re-store to memory larger amounts of data.
• We will use arrays to store the data in memory, and we’ll talk about these things later.
• Three kinds of file I/O to discuss:– Text– Binary– Random access
• For now, we’ll stick with text I/O.
Winter 2006 CISC121 - Prof. McLeod 18
Text File Output in Java 5.0
• Use the PrintWriter class. (As usual), you must import the class:
import java.io.PrintWriter;
• In your program:
PrintWriter fileOut = new PrintWriter(outFilename);
• (outFilename is a String filename we obtained somewhere else…)
Winter 2006 CISC121 - Prof. McLeod 19
Text File Output in Java 5.0, Cont.
• Unfortunately the instantiation of the PrintWriter object can cause a FileNotFoundException to be thrown and you must be ready to catch it:
try {
writeFile = new PrintWriter(outputFile);
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
System.exit(0);
} // end try catch
Winter 2006 CISC121 - Prof. McLeod 20
Aside - File Paths in Strings
• Sometimes you might have to include a path in the filename, such as “C:\Alan\CISC212\Demo.txt”
• Don’t forget that if you have to include a “\” in a String, use “\\”, as in:
“C:\\Alan\\CISC212\\Demo.txt”
Winter 2006 CISC121 - Prof. McLeod 21
Text File Output in Java 5.0, Cont.
• The PrintWriter constructor can also accept a File object (such as provided from JFileChooser!)
Winter 2006 CISC121 - Prof. McLeod 22
Text File Output in Java 5.0, Cont.
• The Object fileOut, owns a couple of familiar methods: print() and println().
• When you are done writing, don’t forget to close the file with:
fileOut.close();
• Way easy!!
Winter 2006 CISC121 - Prof. McLeod 23
Text File Input in Java 5.0
• Use the FileReader and Scanner classes. Our usual import statements:
import java.util.Scanner;
import java.io.FileReader;
import java.io.FileNotFoundException;
• We’ll get to that last one in a minute.
Winter 2006 CISC121 - Prof. McLeod 24
Text File Input in Java 5.0, Cont.• In my program:
fileIn = new FileReader("Test.txt");
Scanner fileInput = new Scanner(fileIn);
• Scanner class’ constructor can also accept a File object directly.
• Unfortunately the FileReader constructor (what’s a “constructor” anyways?) throws a kind of exception that I cannot ignore - so the code above cannot be used exactly in this way.
Winter 2006 CISC121 - Prof. McLeod 25
Text File Input in Java 5.0, Cont.
• This works:
FileReader fileIn = null;
try{
fileIn = new FileReader("Test.txt");
}
catch (FileNotFoundException e) {
// Do something clever here!
}
Scanner fileInput = new Scanner(fileIn);
Winter 2006 CISC121 - Prof. McLeod 26
Without using FileReader
• You can also send a File object to the Scanner class when you instantiate it instead of a FileReader object.
• You will still need to do this in a try catch block as shown in the previous slide.
• See the demo program “TextFileReaderDemo.java”
Winter 2006 CISC121 - Prof. McLeod 27
Text File Input in Java 5.0, Cont.
• We are going to have to talk about try/catch blocks soon! But for now, let’s get back to file input.
• To get the file contents, and print them to the console, for example:
while (fileInput.hasNextLine()) {
System.out.println(fileInput.nextLine());
}
Winter 2006 CISC121 - Prof. McLeod 28
Aside - Scanner Class’ Tokenizer
• The Scanner class has a built in String Tokenizer.
• Set the delimiters using the useDelimiter(delimiter_String) method.
• Obtain the tokens by calling the next() method.• The hasNext() method will return false when
there are no more tokens.
Winter 2006 CISC121 - Prof. McLeod 29
• File is a class in the java.io.* package.• It contains useful utility methods that will help prevent
programs crashing from file errors.• For example:
File myFile = new File(“test.dat”);
myFile.exists(); // returns true if file exists
myFile.canRead(); // returns true if can read from file
myFile.canWrite(); // returns true if can write to file
The File Class
Winter 2006 CISC121 - Prof. McLeod 30
The File Class, Cont.
myFile.delete(); // deletes file and returns true if successful
myFile.length(); // returns length of file in bytes
myFile.getName(); // returns the name of file (like “test.dat”)
myFile.getPath(); // returns path of file (like “C:\AlanStuff\JavaSource”)
Winter 2006 CISC121 - Prof. McLeod 31
Binary and Random Access
• Binary files contain data exactly as it is stored in memory – you can’t read these files in Notepad!
• Text file is sequential access only.• What does that mean?
• Random access can access any byte in the file at any time, in any order.
• More about Binary and Random File Access later!