cwp: java input/output - core web programmingnotes.corewebprogramming.com/instructor/java-io.pdf ·...
TRANSCRIPT
![Page 1: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/1.jpg)
1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
core
programming
Java Input/Output
![Page 2: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/2.jpg)
Input/Output2 www.corewebprogramming.com
Agenda• Handling files and directories through the
File class• Understanding which streams to use for
character-based or byte-based streams• Character File input and output• Formatting output• Reading data from the console• Binary File input and output
![Page 3: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/3.jpg)
Input/Output3 www.corewebprogramming.com
File Class• A File object can refer to either a file or a
directoryFile file1 = new File("data.txt");File file1 = new File("C:\java");
– To obtain the path to the current working directory useSystem.getProperty("user.dir");
– To obtain the file or path separator use System.getProperty("file.separator");System.getProperty("path.separator");
or
File.separator()File.pathSeparator()
![Page 4: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/4.jpg)
Input/Output4 www.corewebprogramming.com
Useful File Methods• isFile/isDirectory• canRead/canWrite• length
– Length of the file in bytes (long) or 0 if nonexistant• list
– If the File object is a directory, returns a String array of all the files and directories contained in the directory; otherwise, null
• mkdir– Creates a new subdirectory
• delete– Deletes the directory and returns true if successful
• toURL– Converts the file path to a URL object
![Page 5: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/5.jpg)
Input/Output5 www.corewebprogramming.com
Directory Listing, Exampleimport java.io.*;
public class DirListing {public static void main(String[] args) {
File dir = new File(System.getProperty("user.dir"));
if(dir.isDirectory()){System.out.println("Directory of " + dir);String[] listing = dir.list();for(int i=0; i<listing.length; i++) {System.out.println("\t" + listing[i]);
}}
}}
![Page 6: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/6.jpg)
Input/Output6 www.corewebprogramming.com
DirectoryListing, Result> java DirListing
Directory of C:\java\DirListing.classDirListing.javatestTryCatchExample.classTryCatchExample.javaXslTransformer.classXslTransformer.java
![Page 7: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/7.jpg)
Input/Output7 www.corewebprogramming.com
Input/Output• The java.io package provides over 60
input/output classes (streams) • Streams are combined (piped together) to
create a desired data source or sink• Streams are either byte-oriented or
character-oriented– Use DataStreams for byte-oriented I/O– Use Readers and Writers for character-based I/O
• Character I/O uses an encoding scheme
• Note: An IOException may occur during any I/O operation
![Page 8: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/8.jpg)
Input/Output8 www.corewebprogramming.com
Character File Output
Desired … Methods Construction
Character File Ouput FileWriter File file = new File("filename"); write(int char) FileWriter fout = new FileWriter(file); write(byte[] buffer) or write(String str) FileWriter fout = new FileWriter("filename");
Buffered Character BufferedWriter File file = new File("filename"); File Output write(int char) FileWriter fout = new FileWriter(file);
write(char[] buffer) BufferedWriter bout = new BufferedWriter(fout); write(String str) or newLine() BufferedWriter bout = new BufferedWriter(
new FileWriter( new File("filename")));
![Page 9: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/9.jpg)
Input/Output9 www.corewebprogramming.com
Character File Output, cont.
Desired … Methods Construction
Character Output PrintWriter FileWriter fout = new FileWriter("filename"); write(int char) PrintWriter pout = new PrintWriter(fout); write(char[] buffer) or writer(String str) PrintWriter pout = new PrintWriter( print( … ) new FileWriter("filename")); println( … ) or
PrintWriter pout = new PrintWriter( new BufferedWriter( new FileWriter("filename")));
![Page 10: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/10.jpg)
Input/Output10 www.corewebprogramming.com
FileWriter• Constructors
– FileWriter(String filename)/FileWriter(File file)• Creates a output stream using the default encoding
– FileWriter(String filename, boolean append)• Creates a new output stream or appends to the existing output
stream (append = true)• Useful Methods
– write(String str)/write(char[] buffer)• Writes string or array of chars to the file
– write(int char)• Writes a character (int) to the file
– flush• Writes any buffered characters to the file
– close• Closes the file stream after performing a flush
– getEncoding• Returns the character encoding used by the file stream
![Page 11: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/11.jpg)
Input/Output11 www.corewebprogramming.com
CharacterFileOutput, Exampleimport java.io.*;
public class CharacterFileOutput {public static void main(String[] args) {
FileWriter out = null;
try {out = new FileWriter("book.txt");System.out.println("Encoding: " + out.getEncoding());out.write("Core Web Programming");out.close();out = null;
} catch(IOException ioe) {System.out.println("IO problem: " + ioe);ioe.printStackTrace(); try {if (out != null) {
out.close();}
} catch(IOException ioe2) { }}
}}
![Page 12: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/12.jpg)
Input/Output12 www.corewebprogramming.com
CharacterFileOutput, Result> java CharacterFileOutputEncoding: Cp1252
> type book.txtCore Web Programming
• Note: Cp1252 is Windows Western Europe / Latin-1– To change the system default encoding useSystem.setProperty("file.encoding", "encoding");
– To specify the encoding when creating the output steam, use an OutputStreamWriterOutputStreamWriter out =
new OutputStreamWriter(new FileOutputStream("book.txt", "8859_1"));
![Page 13: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/13.jpg)
Input/Output13 www.corewebprogramming.com
Formatting Output• Use DecimalFormat to control spacing
and formatting– Java has no printf method
• Approach1. Create a DecimalFormat object describing the
formattingDecimalFormat formatter =
new DecimalFormat("#,###.##");
2. Then use the format method to convert values into formatted strings
formatter.format(24.99);
![Page 14: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/14.jpg)
Input/Output14 www.corewebprogramming.com
Formatting Characters
Symbol Meaning0 Placeholder for a digit.# Placeholder for a digit.
If the digit is leading or trailing zero, then don't display.. Location of decimal point., Display comma at this location.- Minus sign.E Scientific notation.
Indicates the location to separate the mattissa from the exponent.% Multipy the value by 100 and display as a percent.
![Page 15: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/15.jpg)
Input/Output15 www.corewebprogramming.com
NumFormat, Exampleimport java.text.*;
public class NumFormat {public static void main (String[] args) {DecimalFormat science = new DecimalFormat("0.000E0");DecimalFormat plain = new DecimalFormat("0.0000");
for(double d=100.0; d<140.0; d*=1.10) {System.out.println("Scientific: " + science.format(d) +
" and Plain: " + plain.format(d));}
}}
![Page 16: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/16.jpg)
Input/Output16 www.corewebprogramming.com
NumFormat, Result> java NumFormat
Scientific: 1.000E2 and Plain: 100.0000Scientific: 1.100E2 and Plain: 110.0000Scientific: 1.210E2 and Plain: 121.0000Scientific: 1.331E2 and Plain: 133.1000
![Page 17: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/17.jpg)
Input/Output17 www.corewebprogramming.com
Character File Input
Desired … Methods Construction
Character File Input FileReader File file = new File("filename"); read() FileReader fin = new FileReader(file); read(char[] buffer) or
FileReader fin = new FileReader("filename");
Buffered Character BufferedReader File file = new File("filename"); File Input read() FileReader fin = new FileReader(file);
read(char[] buffer) BufferedReader bin = new BufferedReader(fin); readLine() or
BufferedReader bin = new BufferedReader( new FileReader( new File("filename")));
![Page 18: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/18.jpg)
Input/Output18 www.corewebprogramming.com
FileReader• Constructors
– FileReader(String filename)/FileReader(File file)• Creates a input stream using the default encoding
• Useful Methods– read/read(char[] buffer)
• Reads a single character or array of characters• Returns –1 if the end of the steam is reached
– reset• Moves to beginning of stream (file)
– skip• Advances the number of characters
• Note: Wrap a BufferedReader around the FileReader to read full lines of text using readLine
![Page 19: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/19.jpg)
Input/Output19 www.corewebprogramming.com
CharacterFileInput, Exampleimport java.io.*;
public class CharacterFileInput {public static void main(String[] args) {
File file = new File("book.txt");FileReader in = null;
if(file.exists()) {try {in = new FileReader(file);System.out.println("Encoding: " + in.getEncoding());char[] buffer = new char[(int)file.length()];in.read(buffer);System.out.println(buffer);in.close();
} catch(IOException ioe) {System.out.println("IO problem: " + ioe);ioe.printStackTrace(); ...
}}
}}
![Page 20: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/20.jpg)
Input/Output20 www.corewebprogramming.com
CharacterFileInput, Result> java CharacterFileInput
Encoding: Cp1252Core Web Programming
• Alternatively, could read file one line at a time:
BufferedReader in = new BufferedReader(new FileReader(file));
String lineIn;while ((lineIn = in.readLine()) != null) {System.out.println(lineIn);
}
![Page 21: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/21.jpg)
Input/Output21 www.corewebprogramming.com
Console Input• To read input from the console, a stream
must be associated with the standard input, System.in
import java.io.*;
public class IOInput{public static void main(String[] args) {
BufferedReader keyboard;String line; try {
System.out.print("Enter value: ");System.out.flush();keyboard = new BufferedReader(
new InputStreamReader(System.in));line = keyboard.readLine();
} catch(IOException e) {System.out.println("Error reading input!"); }
}}
}
![Page 22: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/22.jpg)
Input/Output22 www.corewebprogramming.com
Binary File Input and Output• Handle byte-based I/O using a
DataInputStream or DataOutputStream
– The readFully method blocks until all bytes are read or an EOF occurs– Values are written in big-endian fashion regardless of computer platform
DataType DataInputStream DataOutputStream
byte readByte writeByte short readShort writeShort int readInt writeInt long readLong writeLong float readFloat writeFloat double readDouble writeDouble boolean readBoolean writeBoolean char readChar writeChar String readUTF writeUTF byte[] readFully
![Page 23: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/23.jpg)
Input/Output23 www.corewebprogramming.com
UCS Transformation Format –UTF-8
• UTF encoding represents a 2-byte Unicode character in 1-3 bytes– Benefit of backward compatibility with existing ASCII
data (one-byte over two-byte Unicode)– Disadvantage of different byte sizes for character
representation
UTF Encoding Bit Pattern Representation
0xxxxxxx ASCII (0x0000 - 0x007F) 10xxxxxx Second or third byte 110xxxxx First byte in a 2-byte sequence (0x0080 - 0x07FF) 1110xxxx First byte in a 3-byte sequence (0x0800 - 0xFFFF)
![Page 24: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/24.jpg)
Input/Output24 www.corewebprogramming.com
Binary File Output
Desired … Methods Construction
Binary File Output FileOutputStream File file = new File("filename"); bytes write(byte) FileOutputStream fout = new FileOutputStream(file);
write(byte[] buffer) or FileOutputStream fout = new FileOutputStream("filename");
Binary File Output DataOutputStream File file = new File("filename"); byte writeByte(byte) FileOutputStream fout = new FileOutputStream(file); short writeShort(short) DataOutputStream dout = new DataOutputStream(fout); int writeInt(int) long writeLong(long) or float writeFloat(float) double writeDouble(double) DataOutputStream dout = new DataOutputStream( char writechar(char) new FileOutputStream( boolean writeBoolean(boolean) new File("filename")));
writeUTF(string) writeBytes(string) writeChars(string)
![Page 25: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/25.jpg)
Input/Output25 www.corewebprogramming.com
Binary File Output, cont.
Desired … Methods Construction
Buffered Binary BufferedOutputStream File file = new File("filename"); File Output flush() FileOutputStream fout = new FileOutputStream(file);
write(byte) BufferedOutputStream bout = new BufferedOutputStream(fout); write(byte[] buffer, int off, int len) DataOutputStream dout = new DataOutputStream(bout);
or
DataOutputStream dout = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( new File("filename"))));
![Page 26: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/26.jpg)
Input/Output26 www.corewebprogramming.com
BinaryFileOutput, Exampleimport java.io.*;
public class BinaryFileOutput {
public static void main(String[] args) {int[] primes = { 1, 2, 3, 5, 11, 17, 19, 23 };DataOutputStream out = null;
try {out = new DataOutputStream(
new FileOutputStream("primes.bin"));
for(int i=0; i<primes.length; i++) {out.writeInt(primes[i]);
}out.close();
} catch(IOException ioe) {System.out.println("IO problem: " + ioe);ioe.printStackTrace();
}}
}
![Page 27: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/27.jpg)
Input/Output27 www.corewebprogramming.com
Binary File InputDesired … Methods Construction
Binary File Input FileInputStream File file = new File("filename"); bytes read() FileInputStream fin = new FileInputStream(file);
read(byte[] buffer) or FileInputStream fin = new FileInputStream("filename");
Binary File Input DataInputStream File file = new File("filename"); byte readByte() FileInputStream fin = new FileInputStream(file); short readShort() DataInputStream din = new DataInputStream(fin); int readInt() long readLong() or float readFloat() double readDouble() DataInputStream din = new DataInputStream( char readchar() new FileInputStream( boolean readBoolean() new File("filename")));
readUTF() readFully(byte[] buffer)
![Page 28: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/28.jpg)
Input/Output28 www.corewebprogramming.com
Binary File Input, cont.
Desired … Methods Construction
Bufferred Binary BufferedInputStream File file = new File("filename"); File Input read() FileInputStream fin = new FileInputStream(file);
read(byte[] buffer, int off, int len) BufferedInputStream bin = new BufferedInputStream(fin); skip(long) DataInputStream din = new DataInputStream(bin);
or
DataInputStream din = new DataInputStream( new BufferedInputStream( new FileInputStream( new File("filename"))));
![Page 29: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/29.jpg)
Input/Output29 www.corewebprogramming.com
BinaryFileInput, Exampleimport java.io.*;
public class BinaryFileInput {public static void main(String[] args) {
DataInputStream in = null;File file = new File("primes.bin");try {
in = new DataInputStream(new FileInputStream(file));
int prime; long size = file.length()/4; // 4 bytes per intfor(long i=0; i<size; i++) {prime = in.readInt();System.out.println(prime);
}in.close();
} catch(IOException ioe) {System.out.println("IO problem: " + ioe);ioe.printStackTrace();
}}
}
![Page 30: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/30.jpg)
Input/Output30 www.corewebprogramming.com
Summary• A File can refer to either a file or a
directory• Use Readers and Writers for character-
based I/O– A BufferedReader is required for readLine– Java provides no printf; use DecimalFormat for formatted
output• Use DataStreams for byte-based I/O
– Chain a FileOutputStream to a DataOutputStream for binary file output
– Chain a FileInputStream to a DataInputStream for binary file input
![Page 31: CWP: Java Input/Output - Core Web Programmingnotes.corewebprogramming.com/instructor/Java-IO.pdf · 3 Input/Output File Class • A Fileobject can refer to either a file or a directory](https://reader031.vdocuments.mx/reader031/viewer/2022011915/5fce85fddef85c6eea3e4894/html5/thumbnails/31.jpg)
31 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com
core
programming
Questions?