System.out.println(“Hello”)

Download Report

Transcript System.out.println(“Hello”)

‫פיתוח מונחה עצמים –‬
‫שפת ‪JAVA‬‬
‫קבצים‬
‫‪References‬‬
‫‪ ‬קורס "שיטות בהנדסת תוכנה"‪ ,‬הפקולטה למדעי‬
‫המחשב‪ ,‬הטכניון‪.‬‬
‫‪ ‬קורס "מערכות מידע מבוזרות"‪ ,‬הפקולטה‬
‫להנדסת תעשייה וניהול‪ ,‬הטכניון‪.‬‬
I/O Streams in Java
Introduction - 1
Definition
Stream is a flow of Data.
• characters read from a file
• bytes written to the network
•…
 The information can be read/written sequentially from/to
the stream.
 The assumption made on the stream: the information
passes in FIFO order.
Introduction - 2
 No matter where the data is coming from or going to and no
matter what its type, the algorithms for sequentially reading
and writing data are basically the same:
Reading:
Writing:
Stream
Source
Stream
reads
Program
Dest.
writes
Program
open a stream
while more information
read information
open a stream
while more information
write information
close the stream
close the stream
Standard Input / Output Streams in Java
Writing to the screen:
Reading from the screen:
System.out.print(…);
System.in.read(byte[]);
System.out.println(…);
System.in.read(byte[],int,int);
 Standard streams are automatically opened, so no need to
open them explicitly.
Writing System.out.print(“Hello\n”); is the same as writing
System.out.println(“Hello”);
 You have to create byte[] array before calling read function.
 read function has to be surrounded by try{ }catch(..){ }
block.
Example - Echo
package test;
import java.io.*;
public class IOTest {
public IOTest() {
}
public static void main(String[] args) {
byte[] ch = new byte[80];
int num = 0;
try {
num = System.in.read(ch);
System.out.println(new String(ch,0,num)); // String(byte[] bt, int offset,int length)
}
catch (IOException ex) {
System.out.println("Can't read");
ex.printStackTrace();
}
}
}
java.io Classes Hierarchy
The Streams can be divided into Character Streams and Byte Streams
Character Streams:
Reader and Writer are the abstract superclasses for character streams in
java.io. Reader provides the API and partial implementation for readers-streams that read 16-bit characters--and Writer provides the API and partial
implementation for writers--streams that write 16-bit characters.
Byte Streams:
To read and write 8-bit bytes, programs should use the byte streams,
descendants of InputStream and OutputStream . InputStream and
OutputStream provide the API and partial implementation for input streams
(streams that read 8-bit bytes) and output streams (streams that write 8-bit
bytes). These streams are typically used to read and write binary data such as
images and sounds.
Character Streams Hierarchy
BufferedReader
LineNumberReader
CharArrayReader
Reader
InputStreamReader
FilterReader
FileReader
PushbackReader
PipedReader
StringReader
BufferedWriter
CharArrayWriter
Writer
OutputStreamWriter
FilterWriter
PipedWriter
StringWriter
FileWriter
Example
import java.io.*; //must be imported
public class Copy {
public static void main(String[] args) throws IOException {
File inputFile = new File("farrago.txt");
File outputFile = new File("outagain.txt");
//FileOutputStream and FileInputStream for bytes
//throws FileNotFoundException (descendent of IOException)
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
// housekeeping
in.close();
out.close();
}
}
Advanced Usage
//extracts from a class – not a whole class
//args <name of file><name of delimiter>
import java.io.*;
import java.util.StringTokenizer;
...
try {
int lineNum, wordNum;
String line;
BufferedReader inStream = new BufferedReader(new FileReader(args[0]));
lineNum = wordNum = 0;
do {
line = inStream.readLine();
if(line != null) {
lineNum++;
StringTokenizer st = new StringTokenizer(line,args[1]);
wordNum += st.countTokens();
}
}while(line != null);
System.out.println("There are " + lineNum + " lines.");
System.out.println("There are " + wordNum + " words.");
}catch(FileNotFoundException fnfe) {
System.out.println("File ("+ args[0] +") not found.");
}catch(IOException ioe) {
System.out.println("I/O error while reading file ("+ args[0] +")");
}
private void writeToFile(String from, String to){
try{
FileReader fr = new FileReader(from);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(to);
String line = null, srt[];
String wline;
int lineNum = wordNum = 0;
while ( (line = br.readLine()) != null ) {
str = line.split("\\s+");
wordNum += str.length;
lineNum ++;}
fw.write("There are " + lineNum + " lines.");
fw.write("There are " + wordNum + " words.");
fw.close(); fr.close();
}
catch (IOException e){
System.out.println("Uh oh, got an IOException error!");
e.printStackTrace();
}
}
IO - Advanced topics
•
Redirecting standard IO
– System contains setIn, setOut and setErr.
•
•
•
•
System.setIn(new FileInputStream(“x.dat”));
System.setOut(new PrintStream(new FileOutputStream( "out.txt")));
– Standard streams could be from/to anything you want!
Compression
– Read about ZipInputStream and ZipOutputStream
For more information:
– jdk documentation
– On-line tutorials : http://java.sun.com/docs/books/tutorial/