Difference between revisions of "IO"

From Suhrid.net Wiki
Jump to navigationJump to search
Line 20: Line 20:
  
 
* Writes characters to a File.
 
* Writes characters to a File.
 +
* Has overloaded write() methods, that take char[], String etc and indexes (to write portion of String)
 +
* Has overloaded append() methods, that take CharSequence.
  
 
== Reader Classes ==
 
== Reader Classes ==

Revision as of 10:35, 5 September 2011

Basic Classes

  • The File class is an abstract representation of files and directory pathnames. It works at a higher level, cant be used to read/write data.
  • FileReader - read character levels - variety of read() methods. Usually wrapped in a BufferedReader.
  • BufferedReader - Reads large chunks of files and keeps it in the buffer. Subsequent requests are got from the buffer thus minimizing the number of times time intensive file IO is performed.

Similarly:

  • FileWriter - write to character files.
  • BufferedWriter - Keeps data in buffer and writes large chunks of buffer to file at once, minimizing file IO.
  • PrintWriter - Has a lot of convenience methods and constructors (takes a File or String etc). Methods like format(), printf() and append() make PrintWriters powerful.
  • NOTE: Many of the IO Based methods throw checked IOException or its subclass - watch out.

Remember:

  • For Characters - Reader and Writer classes are used.
  • For Bytes - Stream classes are used.

Writer Classes

FileWriter

  • Writes characters to a File.
  • Has overloaded write() methods, that take char[], String etc and indexes (to write portion of String)
  • Has overloaded append() methods, that take CharSequence.

Reader Classes

File Class

  • A File object can represent a file or a directory.
  • File f = new File("a.txt") just creates an object representing the file, doesnt create the file on the disk.
  • createNewFile() - will attempt to create a file. Returns true/false depending on the success status.
  • Creating a reader/writer/stream will also automatically create a file if it doesnt exist.
  • mkdir() - will create a directory.
  • list() - returns a String[] of directory contents if the File represents a dir, else it will return null.
  • Deleting is done for both files and directories using the delete() method.
  • Directory which is not empty CANNOT be deleted. delete() will just return false.
  • renameTo() works for both files and directories. Non-empty directory can be renamed too.
  • Paths:
public static void main(String[] args) {
		try {
			//Current path : /home/suhridk/eclipsews/OCPJP/bin
			File f = new File("../somefile.txt");
			System.out.println(f.getPath());          // prints: ../somefile.txt
			System.out.println(f.getAbsolutePath());  // Path from the begining : prints: /home/suhridk/eclipsews/OCPJP/../somefile.txt
			System.out.println(f.getCanonicalPath()); // All relative references resolved: prints: /home/suhridk/eclipsews/somefile.txt
		} catch (Exception e) {
			e.printStackTrace();
		}
}

Console

  • A console is a unique character based device associated with a JVM. Represented by java.io.Console.
  • Whether a JVM has a console or not depends on the platform and the manner in which a JVM is invoked. for e.g. an appserver will not have a console.
  • For a JVM started on the cmd line, the console corresponds to the keyboard and the display monitor.
  • Console console = System.console();
  • Console class provide overloaded readLine() methods to read a String from the console, one takes a format string like printf() to print a prompt.
  • Also similarly provides overloaded readPassword() methods which dont echo the password on the console and return a char[] array.
import java.io.*;
import java.util.Arrays;
import java.util.Date;

public class ConsTest2 {

	public static void main(String[] args) {
		
		Console c = System.console();
		if(c!=null) {
			System.out.println("Got the console");
			String name = c.readLine("Hello, the current time is %s, enter your name : ", new Date());
			System.out.println("Welcome " + name);
		    char[] password = c.readPassword("Please enter your password to continue ");
		    if(Arrays.equals(password, new char[] {'K','a','b','u','k','i'})) {
		    	System.out.println("Correct password ! Greetings, overlord !");
		    } else {
		    	System.out.println("Incorrect password, you will be reported !");
		    }
		}
	}
}