KEMBAR78
Files & IO in Java | PPS
Files & IO Mohamed Shahpoup
Files and Streams:  definition •  Files—these exist on a local file system •  Streams—these represent a “stream” of characters coming from some location. •  Before you can read from a file, you must  open  it.  •  After you are done reading from a file, you must  close  it.
Files and Streams •  There are two common varieties of  reading : —  reading  characters  ( a character is 16 bits long). —  reading  bytes  ( a byte is 8 bits long). •  There are two common varieties of  writing : —  writing  characters  ( a character is 16 bits long). —  writing  bytes  ( a byte is 8 bits long).
Reading Characters •  When we say we want to read characters, it means we never want to move things like images. •  Each of the bubbles in the list below represents a Java class that is designed to read a certain type of character. Each of these is designed for a particular case. Reader  is an abstract class
Writing Characters •  When we are writing characters, the same idea applies. •  Each of the bubbles in the list below represents a Java class that is designed to write a certain type of character. Each of these is designed for a particular case. Writer  is an abstract class
Reading Bytes •  Below is the list of classes you use when you want to read at a finer grain than just characters. That would be  bytes. InputStream   is an abstract class
Writing Bytes •  Below is the list of classes you use when you want to write  bytes . OutputStream  is an abstract class
Reading Characters from a File •  Say you want to read from a file: •  You will need to  open  the file. •  You will need to read from the file to the  end . •  You will need to  close  the file.
•  First of all, what is a   file ? •  A file is an instance of the class   File import java.io; public class FileRead { public FileRead() { File inFile = new File( “Gavin King.txt” ); } public static void main( String[] args ) { FileRead fr = new FileRead(); } } Reading Characters from a File All the classes used in I/O come from this package.
import java.io; public class FileRead { public FileRead() { try {   File inFile = new File( “Gavin King.txt” ); } catch( IOException io ) {   System.out.println( “IOException, io=“ + io ); } } public static void main( String[] args ) { FileRead fr = new FileRead(); } Because the constructor on  File  throws an IOException, we are forced to place it in a try-catch block Reading Characters from a File
public class FileRead { public FileRead() { try {   File  inFile   = new File( “infile.txt” );   File  outFile  = new File( “outFile.txt” );   FileReader  fr  = new FileReader(  inFile  );   FileWriter  fw  = new FileWriter(  outFile  );   int c = 0; boolean keepReading = true;   while( keepReading )   { c =  fr .read(); if( c == -1 )’ {   keepReading = false; } else {    fw .write( c ); }   }   fr.close();   fw.close(); } What is this? We read a character but store it as an integer? That’s right. Although we  read  an  int , the  FileWriter  understands that it needs to  write  these as characters.
Reading Bytes from a File •  The approach for reading  bytes  is nearly the same. •  The difference comes in the classes we choose to do the  reading and writing.
public class FileRead { public FileRead() { try {   File inFile  = new File( “inFile.txt” );   File outFile = new File( “outFile.txt” );   FileInputStream  fis = new  FileInputStream ( inFile );   FileOutputStream  fos = new  FileOutputStream ( outFile );   int c = 0; boolean keepReading = true;   while( keepReading )   { c = fis.read(); if( c == -1 )’ {   keepReading = false; } else {    fos.write( c ); }   }   fr.close();   fw.close(); }
Alternatives for Efficiency •  As you can imagine, reading a byte or a character at a time is pretty inefficient. •  For that reason, there are alternatives.  •  The best one is the  BufferedReader . This class gathers a chunk of data at a read.
public class FileRead { public FileRead() { try {   File inFile  = new File( “C:/orig/aFile.txt” );   File outFile = new File( “C:/final/outFile.txt” );   FileReader  fr  = new FileReader( inFile );   BufferedReader   br  = new  BufferedReader (  fr  );   FileWriter  fw  = new FileWriter( outFile );   BufferedWriter   bw  = new  BufferedWriter (  fw  );   String  temp  = null; boolean keepReading = true;   while( keepReading )   { temp  =  br . readLine(); if(  temp  == null)  {   keepReading = false; } else {    bw .write(  temp  ); }   }   br .close();   fr .close();   bw .close();   fw .close(); } Now, we have added a  BufferedReader , which allows us to read a line at a time. The BufferedWriter also allows us to write an entire  String
 
 

Files & IO in Java

  • 1.
    Files & IOMohamed Shahpoup
  • 2.
    Files and Streams: definition • Files—these exist on a local file system • Streams—these represent a “stream” of characters coming from some location. • Before you can read from a file, you must open it. • After you are done reading from a file, you must close it.
  • 3.
    Files and Streams• There are two common varieties of reading : — reading characters ( a character is 16 bits long). — reading bytes ( a byte is 8 bits long). • There are two common varieties of writing : — writing characters ( a character is 16 bits long). — writing bytes ( a byte is 8 bits long).
  • 4.
    Reading Characters • When we say we want to read characters, it means we never want to move things like images. • Each of the bubbles in the list below represents a Java class that is designed to read a certain type of character. Each of these is designed for a particular case. Reader is an abstract class
  • 5.
    Writing Characters • When we are writing characters, the same idea applies. • Each of the bubbles in the list below represents a Java class that is designed to write a certain type of character. Each of these is designed for a particular case. Writer is an abstract class
  • 6.
    Reading Bytes • Below is the list of classes you use when you want to read at a finer grain than just characters. That would be bytes. InputStream is an abstract class
  • 7.
    Writing Bytes • Below is the list of classes you use when you want to write bytes . OutputStream is an abstract class
  • 8.
    Reading Characters froma File • Say you want to read from a file: • You will need to open the file. • You will need to read from the file to the end . • You will need to close the file.
  • 9.
    • Firstof all, what is a file ? • A file is an instance of the class File import java.io; public class FileRead { public FileRead() { File inFile = new File( “Gavin King.txt” ); } public static void main( String[] args ) { FileRead fr = new FileRead(); } } Reading Characters from a File All the classes used in I/O come from this package.
  • 10.
    import java.io; publicclass FileRead { public FileRead() { try { File inFile = new File( “Gavin King.txt” ); } catch( IOException io ) { System.out.println( “IOException, io=“ + io ); } } public static void main( String[] args ) { FileRead fr = new FileRead(); } Because the constructor on File throws an IOException, we are forced to place it in a try-catch block Reading Characters from a File
  • 11.
    public class FileRead{ public FileRead() { try { File inFile = new File( “infile.txt” ); File outFile = new File( “outFile.txt” ); FileReader fr = new FileReader( inFile ); FileWriter fw = new FileWriter( outFile ); int c = 0; boolean keepReading = true; while( keepReading ) { c = fr .read(); if( c == -1 )’ { keepReading = false; } else { fw .write( c ); } } fr.close(); fw.close(); } What is this? We read a character but store it as an integer? That’s right. Although we read an int , the FileWriter understands that it needs to write these as characters.
  • 12.
    Reading Bytes froma File • The approach for reading bytes is nearly the same. • The difference comes in the classes we choose to do the reading and writing.
  • 13.
    public class FileRead{ public FileRead() { try { File inFile = new File( “inFile.txt” ); File outFile = new File( “outFile.txt” ); FileInputStream fis = new FileInputStream ( inFile ); FileOutputStream fos = new FileOutputStream ( outFile ); int c = 0; boolean keepReading = true; while( keepReading ) { c = fis.read(); if( c == -1 )’ { keepReading = false; } else { fos.write( c ); } } fr.close(); fw.close(); }
  • 14.
    Alternatives for Efficiency• As you can imagine, reading a byte or a character at a time is pretty inefficient. • For that reason, there are alternatives. • The best one is the BufferedReader . This class gathers a chunk of data at a read.
  • 15.
    public class FileRead{ public FileRead() { try { File inFile = new File( “C:/orig/aFile.txt” ); File outFile = new File( “C:/final/outFile.txt” ); FileReader fr = new FileReader( inFile ); BufferedReader br = new BufferedReader ( fr ); FileWriter fw = new FileWriter( outFile ); BufferedWriter bw = new BufferedWriter ( fw ); String temp = null; boolean keepReading = true; while( keepReading ) { temp = br . readLine(); if( temp == null) { keepReading = false; } else { bw .write( temp ); } } br .close(); fr .close(); bw .close(); fw .close(); } Now, we have added a BufferedReader , which allows us to read a line at a time. The BufferedWriter also allows us to write an entire String
  • 16.
  • 17.