SlideShare une entreprise Scribd logo
1  sur  38
Instructor: @Subash @Paudyal
Training on Java
Programming
• What are streams?
• Java IO Streams
• Byte Oriented Streams
• Character Oriented Streams
• Byte Stream Classes
• FileInputStream, FileOutputStream
• BufferedInputStream, BufferedOutputStream
• DataInputStream, DataOutputStream
• PrintStream
• Character Stream Classes
• FileReader, FileWriter
• BufferedReader, BufferedWriter
• RandomAccessFile
• Files
• Directories
Session 12: Java Input Output
© paudyalsubash@yahoo.com 2
© paudyalsubash@yahoo.com 3
• Quickly and easily write programs that accomplish many common IO tasks :
• Reading and writing files
• Communicating over network connections
• Filtering data
• Interpreting a wide variety of formats for integer and floating-point numbers
• Encrypting and decrypting data
• Calculating digital signatures for streams
• Compressing and decompressing data
• Writing objects to streams
• Copying, moving, renaming, and getting information about files and directories
• Letting users choose files from a GUI interface
• Reading and writing non-English text in a variety of character sets
• Formatting integer and floating-point numbers as strings
• Talking directly to modems and other serial port devices
Objective
© paudyalsubash@yahoo.com 4
• A stream is an ordered sequence of bytes of undetermined length.
• Input streams move bytes of data into a Java program from some
generally external source. Like, like a siphon that sucks up water
• Output streams move bytes of data from Java to some generally external
target. Like, A hose that sprays out water
• A stream can represent many different kinds of sources and destinations,
including disk files, devices, network sockets other programs, and
memory arrays
• Streams support many different kinds of data, including simple bytes,
primitive data types, to advanced objects
• Provides interface to external world
Streams
© paudyalsubash@yahoo.com 5
• Input streams read bytes and output streams write bytes.
• Readers read characters and writers write characters.
• Therefore, to understand input and output, you first need a solid
understanding of how Java deals with bytes, integers, characters,
and other primitive data
• Integers: byte (8 bit) , Short (16 bits), Int (32 bits), Long (64 bits)
• Java support only int literal, no byte and short are available
• byte b=42 and short s=24000; //compiler does conversion here
• Byte b1=5, b2=7; Byte b3=b1+b2; is also error as when bytes are
added it gives integer output and that can’t be assigned to byte
What to read and write?
© paudyalsubash@yahoo.com 6
• Standard output (to Screen/Console)
• System.out
• System.out.println(“Hello”);
• System.err
• System.err.println(“Stop”);
• Standard input (from keyboard)
• System.in
• System.in.read();
• Java io files are available in package java.io.*;
• Java’s stream-based I/O is based on four abstract classes:
• Byte Streams (InputStream, OutputStream) – used when working with bytes or other
binary objects
• Character Streams (Reader, and Writer) – used when working with characters or
strings
Data IO in java
© paudyalsubash@yahoo.com 7
• Programs use byte streams to perform input and output of 8-bit
bytes.
• The byte stream classes provide a rich environment for handling byte-
oriented I/O.
• A byte stream can be used with any type of object, including binary
data. This versatility makes byte streams important to many types of
programs.
• All byte stream classes are descended from InputStream and
OutputStream
• Every things is read as byte form (signed integer that ranges from -
128 to 127)
• Java stream classes accept and return int which are internally
converted to byte
Input and Output Byte Streams
© paudyalsubash@yahoo.com 8
• InputStream is an abstract class that defines Java’s model of streaming byte
input
• Most of the methods in this class will throw an IOException when an I/O
error occurs
• We use the derived classes to perform input functions. Some functions are:
• read() read a byte from input stream
• read(byte[] b) read a byte array from input into b
• read(byte[]b, int n, int m) read m bytes into b from nth byte
• available() gives number of bytes in input
• skip(n) skips n bytes from input stream
• reset() goes back to beginning of stream
• close() closes the input stream
• Read() method returns actual number of bytes that were successfully read
or-1 if end of the file is reached.
InputStream
© paudyalsubash@yahoo.com 9
• OutputStream is an abstract class that defines streaming byte
output.
• Most of the methods in this class return void and throw an
IOException in the case of I/O errors.
• OutputStream has following methods:
• write() write a byte to output stream
• write(byte[] b) write all bytes in b into output stream
• write(byte[] b, int n, int m) write m bytes from array b from n’th
• close() Closes the output stream
• flush() flushes the output stream
OutputStream
© paudyalsubash@yahoo.com 10
• The hierarchy of input streams follows similar lines as output streams.
• System.in is an instance of InputStream.
• System.out and System.err are instances of PrintStream.
Input Streams and Output Streams
OutputStream
ByteArray
OutputStream
FileOutput
Stream
FilterOutput
Stream
PipedOutput
Stream
Buffered
OutputStream
PrintStream
DataOutput
Stream
© paudyalsubash@yahoo.com 11
• FileInputStream class creates an InputStream that you can use
to read bytes from a file.
• Constructors:
• FileInputStream(String filePath)
• FileInputStream(File fileObj)
• Code
• FileInputStream f0 = new FileInputStream("/autoexec.bat")
• File f = new File("/autoexec.bat");
• FileInputStream f1 = new FileInputStream(f);
FileInputStream
© paudyalsubash@yahoo.com 12
• FileOutputStream creates an OutputStream that you can use to
write bytes to a file.
• Constructors:
• FileOutputStream(String filePath)
• FileOutputStream(File fileObj)
• FileOutputStream(String filePath, boolean append)
• FileOutputStream(File fileObj, boolean append)
FileOutputStream
© paudyalsubash@yahoo.com 13
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(“file1.txt");
out = new FileOutputStream(“file2.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c); }
}
finally {
if (in != null) {
in.close(); }
if (out != null) {
out.close(); }
}
© paudyalsubash@yahoo.com 14
• Filtered streams are simply wrappers around underlying input or output
streams that transparently provide some extended level of functionality.
• These streams are typically accessed by methods that are expecting a
generic stream
• The filtered byte streams are
• FilterInputStream and
• FilterOutputStream
• The methods provided in these classes are identical to those in
InputStream and OutputStream.
• We deal with the classes derived from Filtered Streams
• Buffered Streams
• Print Streams
• Data Streams
Filtered Streams
© paudyalsubash@yahoo.com 15
• The java.io.DataInputStream and java.io.DataOutputStream classes are
subclasses of FilterInputStream and FilterOutputStream , respectively.
• For the byte-oriented streams, a buffered stream extends a filtered stream
class by attaching a memory buffer to the I/O stream.
• This buffer allows Java to do I/O operations on more than a byte at a time,
thereby improving performance.
• The buffered byte stream classes are BufferedInputStream and
BufferedOutputStream.
• class allows you to "wrap" any InputStream into a buffered stream to
improve performance
• Constructors:
• BufferedInputStream(InputStream inputStream)
• BufferedInputStream(InputStream inputStream, int bufSize)
Buffered Streams
© paudyalsubash@yahoo.com 16
• The PrintStream class provides all of the output capabilities we have
been using from the System file handle, System.out,
• Constructors
• PrintStream(OutputStream outputStream)
• PrintStream(OutputStream outputStream, boolean flushOnNewline)
• PrintStream(OutputStream outputStream, boolean flushOnNewline, String charSet)
• PrintStream supports the print( ) and println( ) methods for all types,
including Object. If an argument is not a primitive type, the
PrintStream methods will call the object’s toString( ) method and
then display the result.
• After JDK5, printf() method was added that allows to specify the
precise format of the data to be written
• PrintStream printf(String fmtString, Object … args)
PrintStream
© paudyalsubash@yahoo.com 17
• Data streams support binary I/O of primitive data type values
(boolean, char, byte, short, int, long, float, and double) as well as
String values.
• DataOutput defines methods that convert values of a primitive
type into a byte sequence and then writes it to the underlying
stream.
• Constructor
• DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
• DataOutputStream dos = new DataOutputStream(new FileOutputStream("output.dat"));
• DataInputStream is the complement of DataOuputStream and
the methods are also equivalent such as readDouble()
DataOutput and DataInput
© paudyalsubash@yahoo.com 18
© paudyalsubash@yahoo.com 19
• the only reliable way to write a String so that it can be recovered
by a DataInputStream is to use UTF-8 encoding, accomplished in
this example using writeUTF( ) and readUTF( )
• UTF-8 is a multi-byte format, and the length of encoding varies
according to the actual character set in use.
• Unicode is a tremendous waste of space and/or bandwidth, so
UTF-8 encodes ASCII characters in a single byte, and non-ASCII
characters in two or three bytes.
• out.writeUTF("Square root of 2");
• System.out.println(in.readUTF());
UTF Format
© paudyalsubash@yahoo.com 20
//First, write the data
DataOutputStream dout =
new DataOutputStream(new
FileOutputStream("Test.dat"));
try {
dout.writeDouble(98.6);
dout.writeInt(1000);
dout.writeBoolean(true);
} catch(FileNotFoundException e) {
System.out.println("Cannot Open Output
File");
return;
} catch(IOException e) {
System.out.println("I/O Error: " + e);
}
// Now, read the data back.
DataInputStream din =
new DataInputStream(new
FileInputStream("Test.dat"));
try{
double d = din.readDouble();
int i = din.readInt();
boolean b = din.readBoolean();
System.out.println("Here are the values: " +
d + " " + i + " " + b);
} catch(FileNotFoundException e) {
System.out.println("Cannot Open Input File");
return;
} catch(IOException e) {
System.out.println("I/O Error: " + e);
}
© paudyalsubash@yahoo.com 21
Exceptions in IO
© paudyalsubash@yahoo.com 22
• Bytes copy seems like a normal program, but it actually
represents a kind of low-level I/O that you should avoid.
• Since abc.txt contains character data, the best approach is to use
character streams, as discussed in the next section.
• There are also streams for more complicated data types. Byte
streams should only be used for the most primitive I/O.
• So why we learn about byte streams?
• Because all other stream types are built on byte streams
When Not to Use Byte Streams
© paudyalsubash@yahoo.com 23
• Readers and writers are based on characters, which can have varying widths
depending on the character set.
• ASCII and ISO Latin-1 use one-byte characters. Unicode uses two-byte characters
• Since characters are ultimately composed of bytes, readers take their input from
streams.
• However, they convert those bytes into chars according to a specified encoding
format before passing them along.
• Similarly, writers convert chars to bytes according to a specified encoding before
writing them onto some underlying stream.
• I/O with character streams is no more complicated than I/O with byte streams.
• All character stream classes are descended from Reader and Writer.
• The most important reason for the Reader and Writer hierarchies is for
internationalization.
Character Streams
© paudyalsubash@yahoo.com 24
• The FileReader class creates a Reader that you can use to read
the contents of a file.
• Reading from file
• FileReader(String filePath)
• FileReader(File fileObj)
• Writing to File
• FileWriter(String fileName)
• FileWriter(String fileName, boolean append)
• If append is true, then the file is appended not overwritten
FileReader and FileWriter
© paudyalsubash@yahoo.com 25
FileReader inputStream = null;
FileWriter outputStream = null;
try {
inputStream = new FileReader(“file1.txt");
outputStream = new FileWriter(“file2.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c); }
}
finally {
if (inputStream != null) {
inputStream.close(); }
if (outputStream != null) {
outputStream.close(); }
} Note: In, Character Copy the int variable holds a character value in its last 16 bits; In Bytes Copy, the int variable holds a byte value in its last 8 bits.
© paudyalsubash@yahoo.com 26
BufferedReader inputStream = null;
PrintWriter outputStream = null;
try {
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new PrintWriter(new FileWriter("characteroutput.txt"));
String l;
while ((l = inputStream.readLine()) != null) {
outputStream.println(l); }
}
finally {
if (inputStream != null) {
inputStream.close(); }
if (outputStream != null) {
outputStream.close(); }
}
Buffered Reader and Writer
We can wrap the FileWriter object to the Buffered Writer to achieve higher performance
Eg. PrintWriter outputStream = new PrintWriter(new BufferedWriter(new FileWriter(file)));
© paudyalsubash@yahoo.com 27
• File input and output streams require you to start reading or writing at the beginning of a file and
then read or write the file in order
• Sometimes, however, you need to read parts of a file in a more or less random order, where the data
near the beginning of the file isn't necessarily read before the data nearer the end.
• Other times you need to both read and write the same file
• Random-access files can be read from or written to or both from a particular byte position in the file.
• The RandomAccessFile class implements both the DataInput and DataOutput interfaces. Therefore,
reads and writes use methods exactly like methods of the DataInputStream and DataOutputStream.
• Constructor
• RandomAccessFile(File fileObj, String access)
• RandomAccessFile(String filename, String access)
• Access defines the file permission ie. r or rw (also rws/rwd)
• Methods
• void seek(long newPos)
• long getFilePointer()
• long length() //find length of file
RandomAccessFile
© paudyalsubash@yahoo.com 28
//Reading from file
RandomAccessFile file = new RandomAccessFile("d:abc.txt", "r");
file.seek(150);
byte[] bytes = new byte[23];
file.read(bytes);
file.close();
System.out.println(new String(bytes));
//Writing to file
String data=“Java Rocks!!!”;
RandomAccessFile file = new RandomAccessFile(“d:abc.txt”, "rw");
file.seek(22);
file.write(data.getBytes());
file.close()
Example
© paudyalsubash@yahoo.com 29
• Most of the classes defined by java.io operate on streams, the
File class does not.
• File deals directly with files and the file system. That is, the File
class does not specify how information is retrieved from or
stored in files; it describes the properties of a file itself.
• File object is used to obtain or manipulate the information
associated with a disk file, such as the permissions, time, date,
and directory path, and to navigate subdirectory hierarchies.
• We should use standard stream input/output classes to direct
access for reading and writing file data
File (java.io.File)
© paudyalsubash@yahoo.com 30
• Constructor
• File(String directoryPath)
• File(String directoryPath, String filename)
• To Get Paths
• getAbsolutePath(), getPath(), getParent(), getCanonicalPath()
• To Check Files
• isFile(), isDirectory(), exists()
• To Get File Properties
• getName(), length(), isAbsolute(), lastModified(), isHidden() //length in bytes
• To Get File Permissions
• canRead(), can Write(), canExecute()
• To Know Storage information
• getFreeSpace(), getUsableSpace(), getTotalSpace()
• Utility Functions
• Boolean createNewFile()
• Boolean renameTo(File nf); renames the file and returns true if success
• Boolean delete(); deletes the file represented by path of file (also delete directory if its empty)
• Boolean setLastModified(long ms) sets timestamp(Jan 1, 1970 UTC as a start time)
• Boolean setReadOnly() to mark file as readable (also can be done writable, and executable.)
© paudyalsubash@yahoo.com 31
• You can create an instance of File from a String pathname:
• File fooFile = new File( "/tmp/foo.txt" );
• File fooFile = new File( "/tmp", "foo.txt" );
• File barDir = new File( "/tmp/bar" );
• You can also create a file with a relative path:
• File f = new File( "foo" );
• In this case, Java works relative to the current directory of the Java interpreter. Can find
the current directory by checking the user.dir property in the System Properties list:
System.getProperty("user.dir"));
• The static method createTempFile(string prefix, string suffix ) , creates a file in a specified
location using an automatically generated unique name
• Use int compareTo(File f) to compare two files.
• Use the static method File.listRoots( ) to know about all the top-level directories, such as
C:, D: etc
• File[] drives = File.listRoots( );
© paudyalsubash@yahoo.com 32
• A directory is a File that contains a list of other files and
directories.
• When you create a File object that is directory, the isDirectory( )
method will return true and you can use list() method
• Methods
• String[] list( ) extract the list of files and directories inside
• File[] listFiles() return array of File objects
• File[] listFiles(FileFilter ff) return File that satisfied FileFilter which uses
Boolean accept(File path) that match path argument
• Boolean mkdir()/mkdirs() create specify directory / with path
Directory
© paudyalsubash@yahoo.com 33
String dirname = "/java";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println(“Reading Directory = " + dirname);
String s[] = f1.list();
for (int i=0; i < s.length; i++) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory())
System.out.println(s[i] + " is a directory");
else
System.out.println(s[i] + " is a file");
}
Code
• Queries?
End of Java IO
© paudyalsubash@yahoo.com 34
© paudyalsubash@yahoo.com 35
• How is a -1 that appears as a part of data to be distinguished from a -1 indicating end of stream?
• Read() function doesn’t return a byte; its signature says it return an integers. This int is not a java byte with value between -128 to
+127 but a more general byte with value between 0 and 255. Hence -1 can be easily distinguished.
• How conversion?
• Since bytes have such a small range, they're often converted to ints in calculations and method invocations.
• Casting from an int to a byte—for that matter, casting from any wider integer type to a narrower type—takes place through
truncation of the high-order bytes.
• This means that as long as the value of the wider type can be expressed in the narrower type, the value is not changed. The int 127
cast to a byte still retains the value 127. On the other hand, if the int value is too large for a byte, strange things happen. So, 128 will
be 10000000 is -127 How? (absolute value of –ve number is found by taking complement and adding 1 to it)
• How characters are treated?
• Since computers only really understand numbers, characters are encoded by matching each character in a given script to a particular
number. For example, in the common ASCII encoding, the character A is mapped to the number 65;
• ASCII, the American Standard Code for Information Interchange, is a seven-bit character set. Thus it defines 27 or 128 different
characters whose numeric values range from to 127. These characters are sufficient for handling most of American English
• How Character Stream work?
• Character-oriented data in Java is primarily composed of the char primitive data type . you need to understand chars to understand
how reader and writer works.
• In Java, a char is a two-byte, unsigned integer, the only unsigned type in Java. Thus, possible char values range from 0 to 65,535.
Chars may be assigned to by using int literals in this range
• chars may also be assigned to by using char literals; that is, the character itself enclosed in single quotes.
© paudyalsubash@yahoo.com 36
• difference between an 8-bit byte and a 32-bit int ?
• is insignificant for a single number
• it can be very significant when several thousand to several million
numbers are read.
• In fact, a single byte still takes up four bytes of space inside the Java
virtual machine, but
• byte array only occupies the amount of space it actually needs.
• The virtual machine includes special instructions for operating on
byte arrays, but
• does not include any instructions for operating on single bytes.
They're just promoted to int.
How JVM treats byte & byte[]
© paudyalsubash@yahoo.com 37
• You often want to look for a particular kind of file—for example, text files, image files etc.
• Need a FilenameFilter or FileFilter object that specifies which files you'll accept
• FilenameFilter is an interface with method
• Public abstract Boolean accept(File dir,String name)
• FileFilter is an interface with method
• Public abstract Boolean accept(File dir)
• public File[] listFiles(FilenameFilter filter)
• public File[] listFiles(FileFilter filter)
public class ImageFilter implements FilenameFilter {
public boolean accept(File directory, String name) {
if (name.endsWith(".jpg")) return true;
if (name.endsWith(".jpeg")) return true;
return false;
}
//public class HTMLFilter implements FileFilter {
//public boolean accept(File pathname) {
//if (pathname.getName().endsWith(".html")) return true; }
File dir = new File("/public/picture/");
File[] imgs = dir.listFiles(new ImageFilter());
Read Filtered Files only
© paudyalsubash@yahoo.com 38
• Open the file
Character Chart

Contenu connexe

Tendances (20)

String and string buffer
String and string bufferString and string buffer
String and string buffer
 
Java I/O
Java I/OJava I/O
Java I/O
 
Enums in c
Enums in cEnums in c
Enums in c
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
 
Interface in java
Interface in javaInterface in java
Interface in java
 
Java abstract class & abstract methods
Java abstract class & abstract methodsJava abstract class & abstract methods
Java abstract class & abstract methods
 
L21 io streams
L21 io streamsL21 io streams
L21 io streams
 
9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in java
 
File handling
File handlingFile handling
File handling
 
Java String Handling
Java String HandlingJava String Handling
Java String Handling
 
Java threads
Java threadsJava threads
Java threads
 
Built in exceptions
Built in exceptions Built in exceptions
Built in exceptions
 
String, string builder, string buffer
String, string builder, string bufferString, string builder, string buffer
String, string builder, string buffer
 
Python programming : Strings
Python programming : StringsPython programming : Strings
Python programming : Strings
 
Packages in java
Packages in javaPackages in java
Packages in java
 
Exception Handling in JAVA
Exception Handling in JAVAException Handling in JAVA
Exception Handling in JAVA
 
Exception Handling
Exception HandlingException Handling
Exception Handling
 
Java input
Java inputJava input
Java input
 
Java file
Java fileJava file
Java file
 
File in C language
File in C languageFile in C language
File in C language
 

En vedette

Various io stream classes .47
Various io stream classes .47Various io stream classes .47
Various io stream classes .47myrajendra
 
Java IO Package and Streams
Java IO Package and StreamsJava IO Package and Streams
Java IO Package and Streamsbabak danyal
 
Introduction to class in java
Introduction to class in javaIntroduction to class in java
Introduction to class in javakamal kotecha
 
Jedi Slides Intro2 Chapter12 Advanced Io Streams
Jedi Slides Intro2 Chapter12 Advanced Io StreamsJedi Slides Intro2 Chapter12 Advanced Io Streams
Jedi Slides Intro2 Chapter12 Advanced Io StreamsDon Bosco BSIT
 
Character stream classes .52
Character stream classes .52Character stream classes .52
Character stream classes .52myrajendra
 
Byte stream classes.49
Byte stream classes.49Byte stream classes.49
Byte stream classes.49myrajendra
 
Nested classes in java
Nested classes in javaNested classes in java
Nested classes in javaRicha Singh
 
Inner classes9 cm604.28
Inner classes9 cm604.28Inner classes9 cm604.28
Inner classes9 cm604.28myrajendra
 
I/O in java Part 1
I/O in java Part 1I/O in java Part 1
I/O in java Part 1ashishspace
 
Inner classes ,annoumous and outer classes in java
Inner classes ,annoumous and outer classes in javaInner classes ,annoumous and outer classes in java
Inner classes ,annoumous and outer classes in javaAdil Mehmoood
 
Java: Objects and Object References
Java: Objects and Object ReferencesJava: Objects and Object References
Java: Objects and Object ReferencesTareq Hasan
 
Collections Framework
Collections FrameworkCollections Framework
Collections FrameworkSunil OS
 
JAVA Variables and Operators
JAVA Variables and OperatorsJAVA Variables and Operators
JAVA Variables and OperatorsSunil OS
 

En vedette (20)

Various io stream classes .47
Various io stream classes .47Various io stream classes .47
Various io stream classes .47
 
Java IO Package and Streams
Java IO Package and StreamsJava IO Package and Streams
Java IO Package and Streams
 
Handling I/O in Java
Handling I/O in JavaHandling I/O in Java
Handling I/O in Java
 
Introduction to class in java
Introduction to class in javaIntroduction to class in java
Introduction to class in java
 
Java tutorial PPT
Java tutorial PPTJava tutorial PPT
Java tutorial PPT
 
C++ to java
C++ to javaC++ to java
C++ to java
 
Jedi Slides Intro2 Chapter12 Advanced Io Streams
Jedi Slides Intro2 Chapter12 Advanced Io StreamsJedi Slides Intro2 Chapter12 Advanced Io Streams
Jedi Slides Intro2 Chapter12 Advanced Io Streams
 
Unit v
Unit vUnit v
Unit v
 
Character stream classes .52
Character stream classes .52Character stream classes .52
Character stream classes .52
 
Byte stream classes.49
Byte stream classes.49Byte stream classes.49
Byte stream classes.49
 
Nested classes in java
Nested classes in javaNested classes in java
Nested classes in java
 
Inner classes9 cm604.28
Inner classes9 cm604.28Inner classes9 cm604.28
Inner classes9 cm604.28
 
Inner classes
Inner classesInner classes
Inner classes
 
I/O in java Part 1
I/O in java Part 1I/O in java Part 1
I/O in java Part 1
 
Inner classes ,annoumous and outer classes in java
Inner classes ,annoumous and outer classes in javaInner classes ,annoumous and outer classes in java
Inner classes ,annoumous and outer classes in java
 
Java API, Exceptions and IO
Java API, Exceptions and IOJava API, Exceptions and IO
Java API, Exceptions and IO
 
Java: Objects and Object References
Java: Objects and Object ReferencesJava: Objects and Object References
Java: Objects and Object References
 
Collections Framework
Collections FrameworkCollections Framework
Collections Framework
 
Java Inner Classes
Java Inner ClassesJava Inner Classes
Java Inner Classes
 
JAVA Variables and Operators
JAVA Variables and OperatorsJAVA Variables and Operators
JAVA Variables and Operators
 

Similaire à Java Input Output (java.io.*)

Similaire à Java Input Output (java.io.*) (20)

IOStream.pptx
IOStream.pptxIOStream.pptx
IOStream.pptx
 
CHAPTER 5 mechanical engineeringasaaa.pptx
CHAPTER 5 mechanical engineeringasaaa.pptxCHAPTER 5 mechanical engineeringasaaa.pptx
CHAPTER 5 mechanical engineeringasaaa.pptx
 
Io stream
Io streamIo stream
Io stream
 
Advanced programming ch2
Advanced programming ch2Advanced programming ch2
Advanced programming ch2
 
Java I/O
Java I/OJava I/O
Java I/O
 
CSE3146-ADV JAVA M2.pdf
CSE3146-ADV JAVA M2.pdfCSE3146-ADV JAVA M2.pdf
CSE3146-ADV JAVA M2.pdf
 
Javaiostream
JavaiostreamJavaiostream
Javaiostream
 
Java Tutorial Lab 6
Java Tutorial Lab 6Java Tutorial Lab 6
Java Tutorial Lab 6
 
javaiostream
javaiostreamjavaiostream
javaiostream
 
Javaiostream
JavaiostreamJavaiostream
Javaiostream
 
Apache Arrow Workshop at VLDB 2019 / BOSS Session
Apache Arrow Workshop at VLDB 2019 / BOSS SessionApache Arrow Workshop at VLDB 2019 / BOSS Session
Apache Arrow Workshop at VLDB 2019 / BOSS Session
 
Using Input Output
Using Input OutputUsing Input Output
Using Input Output
 
Java input output package
Java input output packageJava input output package
Java input output package
 
Files io
Files ioFiles io
Files io
 
Basic IO
Basic IOBasic IO
Basic IO
 
Java Day-6
Java Day-6Java Day-6
Java Day-6
 
5java Io
5java Io5java Io
5java Io
 
05io
05io05io
05io
 
CPP17 - File IO
CPP17 - File IOCPP17 - File IO
CPP17 - File IO
 
Itp 120 Chapt 19 2009 Binary Input & Output
Itp 120 Chapt 19 2009 Binary Input & OutputItp 120 Chapt 19 2009 Binary Input & Output
Itp 120 Chapt 19 2009 Binary Input & Output
 

Dernier

Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 

Dernier (20)

Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 

Java Input Output (java.io.*)

  • 2. • What are streams? • Java IO Streams • Byte Oriented Streams • Character Oriented Streams • Byte Stream Classes • FileInputStream, FileOutputStream • BufferedInputStream, BufferedOutputStream • DataInputStream, DataOutputStream • PrintStream • Character Stream Classes • FileReader, FileWriter • BufferedReader, BufferedWriter • RandomAccessFile • Files • Directories Session 12: Java Input Output © paudyalsubash@yahoo.com 2
  • 3. © paudyalsubash@yahoo.com 3 • Quickly and easily write programs that accomplish many common IO tasks : • Reading and writing files • Communicating over network connections • Filtering data • Interpreting a wide variety of formats for integer and floating-point numbers • Encrypting and decrypting data • Calculating digital signatures for streams • Compressing and decompressing data • Writing objects to streams • Copying, moving, renaming, and getting information about files and directories • Letting users choose files from a GUI interface • Reading and writing non-English text in a variety of character sets • Formatting integer and floating-point numbers as strings • Talking directly to modems and other serial port devices Objective
  • 4. © paudyalsubash@yahoo.com 4 • A stream is an ordered sequence of bytes of undetermined length. • Input streams move bytes of data into a Java program from some generally external source. Like, like a siphon that sucks up water • Output streams move bytes of data from Java to some generally external target. Like, A hose that sprays out water • A stream can represent many different kinds of sources and destinations, including disk files, devices, network sockets other programs, and memory arrays • Streams support many different kinds of data, including simple bytes, primitive data types, to advanced objects • Provides interface to external world Streams
  • 5. © paudyalsubash@yahoo.com 5 • Input streams read bytes and output streams write bytes. • Readers read characters and writers write characters. • Therefore, to understand input and output, you first need a solid understanding of how Java deals with bytes, integers, characters, and other primitive data • Integers: byte (8 bit) , Short (16 bits), Int (32 bits), Long (64 bits) • Java support only int literal, no byte and short are available • byte b=42 and short s=24000; //compiler does conversion here • Byte b1=5, b2=7; Byte b3=b1+b2; is also error as when bytes are added it gives integer output and that can’t be assigned to byte What to read and write?
  • 6. © paudyalsubash@yahoo.com 6 • Standard output (to Screen/Console) • System.out • System.out.println(“Hello”); • System.err • System.err.println(“Stop”); • Standard input (from keyboard) • System.in • System.in.read(); • Java io files are available in package java.io.*; • Java’s stream-based I/O is based on four abstract classes: • Byte Streams (InputStream, OutputStream) – used when working with bytes or other binary objects • Character Streams (Reader, and Writer) – used when working with characters or strings Data IO in java
  • 7. © paudyalsubash@yahoo.com 7 • Programs use byte streams to perform input and output of 8-bit bytes. • The byte stream classes provide a rich environment for handling byte- oriented I/O. • A byte stream can be used with any type of object, including binary data. This versatility makes byte streams important to many types of programs. • All byte stream classes are descended from InputStream and OutputStream • Every things is read as byte form (signed integer that ranges from - 128 to 127) • Java stream classes accept and return int which are internally converted to byte Input and Output Byte Streams
  • 8. © paudyalsubash@yahoo.com 8 • InputStream is an abstract class that defines Java’s model of streaming byte input • Most of the methods in this class will throw an IOException when an I/O error occurs • We use the derived classes to perform input functions. Some functions are: • read() read a byte from input stream • read(byte[] b) read a byte array from input into b • read(byte[]b, int n, int m) read m bytes into b from nth byte • available() gives number of bytes in input • skip(n) skips n bytes from input stream • reset() goes back to beginning of stream • close() closes the input stream • Read() method returns actual number of bytes that were successfully read or-1 if end of the file is reached. InputStream
  • 9. © paudyalsubash@yahoo.com 9 • OutputStream is an abstract class that defines streaming byte output. • Most of the methods in this class return void and throw an IOException in the case of I/O errors. • OutputStream has following methods: • write() write a byte to output stream • write(byte[] b) write all bytes in b into output stream • write(byte[] b, int n, int m) write m bytes from array b from n’th • close() Closes the output stream • flush() flushes the output stream OutputStream
  • 10. © paudyalsubash@yahoo.com 10 • The hierarchy of input streams follows similar lines as output streams. • System.in is an instance of InputStream. • System.out and System.err are instances of PrintStream. Input Streams and Output Streams OutputStream ByteArray OutputStream FileOutput Stream FilterOutput Stream PipedOutput Stream Buffered OutputStream PrintStream DataOutput Stream
  • 11. © paudyalsubash@yahoo.com 11 • FileInputStream class creates an InputStream that you can use to read bytes from a file. • Constructors: • FileInputStream(String filePath) • FileInputStream(File fileObj) • Code • FileInputStream f0 = new FileInputStream("/autoexec.bat") • File f = new File("/autoexec.bat"); • FileInputStream f1 = new FileInputStream(f); FileInputStream
  • 12. © paudyalsubash@yahoo.com 12 • FileOutputStream creates an OutputStream that you can use to write bytes to a file. • Constructors: • FileOutputStream(String filePath) • FileOutputStream(File fileObj) • FileOutputStream(String filePath, boolean append) • FileOutputStream(File fileObj, boolean append) FileOutputStream
  • 13. © paudyalsubash@yahoo.com 13 FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream(“file1.txt"); out = new FileOutputStream(“file2.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } }
  • 14. © paudyalsubash@yahoo.com 14 • Filtered streams are simply wrappers around underlying input or output streams that transparently provide some extended level of functionality. • These streams are typically accessed by methods that are expecting a generic stream • The filtered byte streams are • FilterInputStream and • FilterOutputStream • The methods provided in these classes are identical to those in InputStream and OutputStream. • We deal with the classes derived from Filtered Streams • Buffered Streams • Print Streams • Data Streams Filtered Streams
  • 15. © paudyalsubash@yahoo.com 15 • The java.io.DataInputStream and java.io.DataOutputStream classes are subclasses of FilterInputStream and FilterOutputStream , respectively. • For the byte-oriented streams, a buffered stream extends a filtered stream class by attaching a memory buffer to the I/O stream. • This buffer allows Java to do I/O operations on more than a byte at a time, thereby improving performance. • The buffered byte stream classes are BufferedInputStream and BufferedOutputStream. • class allows you to "wrap" any InputStream into a buffered stream to improve performance • Constructors: • BufferedInputStream(InputStream inputStream) • BufferedInputStream(InputStream inputStream, int bufSize) Buffered Streams
  • 16. © paudyalsubash@yahoo.com 16 • The PrintStream class provides all of the output capabilities we have been using from the System file handle, System.out, • Constructors • PrintStream(OutputStream outputStream) • PrintStream(OutputStream outputStream, boolean flushOnNewline) • PrintStream(OutputStream outputStream, boolean flushOnNewline, String charSet) • PrintStream supports the print( ) and println( ) methods for all types, including Object. If an argument is not a primitive type, the PrintStream methods will call the object’s toString( ) method and then display the result. • After JDK5, printf() method was added that allows to specify the precise format of the data to be written • PrintStream printf(String fmtString, Object … args) PrintStream
  • 17. © paudyalsubash@yahoo.com 17 • Data streams support binary I/O of primitive data type values (boolean, char, byte, short, int, long, float, and double) as well as String values. • DataOutput defines methods that convert values of a primitive type into a byte sequence and then writes it to the underlying stream. • Constructor • DataInputStream dis = new DataInputStream(new FileInputStream("data.txt")); • DataOutputStream dos = new DataOutputStream(new FileOutputStream("output.dat")); • DataInputStream is the complement of DataOuputStream and the methods are also equivalent such as readDouble() DataOutput and DataInput
  • 19. © paudyalsubash@yahoo.com 19 • the only reliable way to write a String so that it can be recovered by a DataInputStream is to use UTF-8 encoding, accomplished in this example using writeUTF( ) and readUTF( ) • UTF-8 is a multi-byte format, and the length of encoding varies according to the actual character set in use. • Unicode is a tremendous waste of space and/or bandwidth, so UTF-8 encodes ASCII characters in a single byte, and non-ASCII characters in two or three bytes. • out.writeUTF("Square root of 2"); • System.out.println(in.readUTF()); UTF Format
  • 20. © paudyalsubash@yahoo.com 20 //First, write the data DataOutputStream dout = new DataOutputStream(new FileOutputStream("Test.dat")); try { dout.writeDouble(98.6); dout.writeInt(1000); dout.writeBoolean(true); } catch(FileNotFoundException e) { System.out.println("Cannot Open Output File"); return; } catch(IOException e) { System.out.println("I/O Error: " + e); } // Now, read the data back. DataInputStream din = new DataInputStream(new FileInputStream("Test.dat")); try{ double d = din.readDouble(); int i = din.readInt(); boolean b = din.readBoolean(); System.out.println("Here are the values: " + d + " " + i + " " + b); } catch(FileNotFoundException e) { System.out.println("Cannot Open Input File"); return; } catch(IOException e) { System.out.println("I/O Error: " + e); }
  • 22. © paudyalsubash@yahoo.com 22 • Bytes copy seems like a normal program, but it actually represents a kind of low-level I/O that you should avoid. • Since abc.txt contains character data, the best approach is to use character streams, as discussed in the next section. • There are also streams for more complicated data types. Byte streams should only be used for the most primitive I/O. • So why we learn about byte streams? • Because all other stream types are built on byte streams When Not to Use Byte Streams
  • 23. © paudyalsubash@yahoo.com 23 • Readers and writers are based on characters, which can have varying widths depending on the character set. • ASCII and ISO Latin-1 use one-byte characters. Unicode uses two-byte characters • Since characters are ultimately composed of bytes, readers take their input from streams. • However, they convert those bytes into chars according to a specified encoding format before passing them along. • Similarly, writers convert chars to bytes according to a specified encoding before writing them onto some underlying stream. • I/O with character streams is no more complicated than I/O with byte streams. • All character stream classes are descended from Reader and Writer. • The most important reason for the Reader and Writer hierarchies is for internationalization. Character Streams
  • 24. © paudyalsubash@yahoo.com 24 • The FileReader class creates a Reader that you can use to read the contents of a file. • Reading from file • FileReader(String filePath) • FileReader(File fileObj) • Writing to File • FileWriter(String fileName) • FileWriter(String fileName, boolean append) • If append is true, then the file is appended not overwritten FileReader and FileWriter
  • 25. © paudyalsubash@yahoo.com 25 FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader(“file1.txt"); outputStream = new FileWriter(“file2.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } Note: In, Character Copy the int variable holds a character value in its last 16 bits; In Bytes Copy, the int variable holds a byte value in its last 8 bits.
  • 26. © paudyalsubash@yahoo.com 26 BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream = new PrintWriter(new FileWriter("characteroutput.txt")); String l; while ((l = inputStream.readLine()) != null) { outputStream.println(l); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } Buffered Reader and Writer We can wrap the FileWriter object to the Buffered Writer to achieve higher performance Eg. PrintWriter outputStream = new PrintWriter(new BufferedWriter(new FileWriter(file)));
  • 27. © paudyalsubash@yahoo.com 27 • File input and output streams require you to start reading or writing at the beginning of a file and then read or write the file in order • Sometimes, however, you need to read parts of a file in a more or less random order, where the data near the beginning of the file isn't necessarily read before the data nearer the end. • Other times you need to both read and write the same file • Random-access files can be read from or written to or both from a particular byte position in the file. • The RandomAccessFile class implements both the DataInput and DataOutput interfaces. Therefore, reads and writes use methods exactly like methods of the DataInputStream and DataOutputStream. • Constructor • RandomAccessFile(File fileObj, String access) • RandomAccessFile(String filename, String access) • Access defines the file permission ie. r or rw (also rws/rwd) • Methods • void seek(long newPos) • long getFilePointer() • long length() //find length of file RandomAccessFile
  • 28. © paudyalsubash@yahoo.com 28 //Reading from file RandomAccessFile file = new RandomAccessFile("d:abc.txt", "r"); file.seek(150); byte[] bytes = new byte[23]; file.read(bytes); file.close(); System.out.println(new String(bytes)); //Writing to file String data=“Java Rocks!!!”; RandomAccessFile file = new RandomAccessFile(“d:abc.txt”, "rw"); file.seek(22); file.write(data.getBytes()); file.close() Example
  • 29. © paudyalsubash@yahoo.com 29 • Most of the classes defined by java.io operate on streams, the File class does not. • File deals directly with files and the file system. That is, the File class does not specify how information is retrieved from or stored in files; it describes the properties of a file itself. • File object is used to obtain or manipulate the information associated with a disk file, such as the permissions, time, date, and directory path, and to navigate subdirectory hierarchies. • We should use standard stream input/output classes to direct access for reading and writing file data File (java.io.File)
  • 30. © paudyalsubash@yahoo.com 30 • Constructor • File(String directoryPath) • File(String directoryPath, String filename) • To Get Paths • getAbsolutePath(), getPath(), getParent(), getCanonicalPath() • To Check Files • isFile(), isDirectory(), exists() • To Get File Properties • getName(), length(), isAbsolute(), lastModified(), isHidden() //length in bytes • To Get File Permissions • canRead(), can Write(), canExecute() • To Know Storage information • getFreeSpace(), getUsableSpace(), getTotalSpace() • Utility Functions • Boolean createNewFile() • Boolean renameTo(File nf); renames the file and returns true if success • Boolean delete(); deletes the file represented by path of file (also delete directory if its empty) • Boolean setLastModified(long ms) sets timestamp(Jan 1, 1970 UTC as a start time) • Boolean setReadOnly() to mark file as readable (also can be done writable, and executable.)
  • 31. © paudyalsubash@yahoo.com 31 • You can create an instance of File from a String pathname: • File fooFile = new File( "/tmp/foo.txt" ); • File fooFile = new File( "/tmp", "foo.txt" ); • File barDir = new File( "/tmp/bar" ); • You can also create a file with a relative path: • File f = new File( "foo" ); • In this case, Java works relative to the current directory of the Java interpreter. Can find the current directory by checking the user.dir property in the System Properties list: System.getProperty("user.dir")); • The static method createTempFile(string prefix, string suffix ) , creates a file in a specified location using an automatically generated unique name • Use int compareTo(File f) to compare two files. • Use the static method File.listRoots( ) to know about all the top-level directories, such as C:, D: etc • File[] drives = File.listRoots( );
  • 32. © paudyalsubash@yahoo.com 32 • A directory is a File that contains a list of other files and directories. • When you create a File object that is directory, the isDirectory( ) method will return true and you can use list() method • Methods • String[] list( ) extract the list of files and directories inside • File[] listFiles() return array of File objects • File[] listFiles(FileFilter ff) return File that satisfied FileFilter which uses Boolean accept(File path) that match path argument • Boolean mkdir()/mkdirs() create specify directory / with path Directory
  • 33. © paudyalsubash@yahoo.com 33 String dirname = "/java"; File f1 = new File(dirname); if (f1.isDirectory()) { System.out.println(“Reading Directory = " + dirname); String s[] = f1.list(); for (int i=0; i < s.length; i++) { File f = new File(dirname + "/" + s[i]); if (f.isDirectory()) System.out.println(s[i] + " is a directory"); else System.out.println(s[i] + " is a file"); } Code
  • 34. • Queries? End of Java IO © paudyalsubash@yahoo.com 34
  • 35. © paudyalsubash@yahoo.com 35 • How is a -1 that appears as a part of data to be distinguished from a -1 indicating end of stream? • Read() function doesn’t return a byte; its signature says it return an integers. This int is not a java byte with value between -128 to +127 but a more general byte with value between 0 and 255. Hence -1 can be easily distinguished. • How conversion? • Since bytes have such a small range, they're often converted to ints in calculations and method invocations. • Casting from an int to a byte—for that matter, casting from any wider integer type to a narrower type—takes place through truncation of the high-order bytes. • This means that as long as the value of the wider type can be expressed in the narrower type, the value is not changed. The int 127 cast to a byte still retains the value 127. On the other hand, if the int value is too large for a byte, strange things happen. So, 128 will be 10000000 is -127 How? (absolute value of –ve number is found by taking complement and adding 1 to it) • How characters are treated? • Since computers only really understand numbers, characters are encoded by matching each character in a given script to a particular number. For example, in the common ASCII encoding, the character A is mapped to the number 65; • ASCII, the American Standard Code for Information Interchange, is a seven-bit character set. Thus it defines 27 or 128 different characters whose numeric values range from to 127. These characters are sufficient for handling most of American English • How Character Stream work? • Character-oriented data in Java is primarily composed of the char primitive data type . you need to understand chars to understand how reader and writer works. • In Java, a char is a two-byte, unsigned integer, the only unsigned type in Java. Thus, possible char values range from 0 to 65,535. Chars may be assigned to by using int literals in this range • chars may also be assigned to by using char literals; that is, the character itself enclosed in single quotes.
  • 36. © paudyalsubash@yahoo.com 36 • difference between an 8-bit byte and a 32-bit int ? • is insignificant for a single number • it can be very significant when several thousand to several million numbers are read. • In fact, a single byte still takes up four bytes of space inside the Java virtual machine, but • byte array only occupies the amount of space it actually needs. • The virtual machine includes special instructions for operating on byte arrays, but • does not include any instructions for operating on single bytes. They're just promoted to int. How JVM treats byte & byte[]
  • 37. © paudyalsubash@yahoo.com 37 • You often want to look for a particular kind of file—for example, text files, image files etc. • Need a FilenameFilter or FileFilter object that specifies which files you'll accept • FilenameFilter is an interface with method • Public abstract Boolean accept(File dir,String name) • FileFilter is an interface with method • Public abstract Boolean accept(File dir) • public File[] listFiles(FilenameFilter filter) • public File[] listFiles(FileFilter filter) public class ImageFilter implements FilenameFilter { public boolean accept(File directory, String name) { if (name.endsWith(".jpg")) return true; if (name.endsWith(".jpeg")) return true; return false; } //public class HTMLFilter implements FileFilter { //public boolean accept(File pathname) { //if (pathname.getName().endsWith(".html")) return true; } File dir = new File("/public/picture/"); File[] imgs = dir.listFiles(new ImageFilter()); Read Filtered Files only
  • 38. © paudyalsubash@yahoo.com 38 • Open the file Character Chart