Table of Contents

File I/O

Reading/writing from/to files is an important component of many Java programs.

The File class from java.io package is used to represent a file in Java.

File Class

File inFile = new File("stuff.txt");
File inFile = new File("C:/data/stuff.txt");
File directory = new File("C:/data");

The following example code will display a does not exist message if the stuff.txt file is not in the current directory.

File inFile = new File("stuff.txt");
if(inFile.exists()==false) {
  System.out.println("stuff.txt does not exist");
}

The following example code will display a list of all of the filenames (but not subdirectory names) of the files in the specified directory.

String dirName = "c:/data/se1020/eclipse/se1020";
File directory = new File(dirName);
if(directory.isDirectory()==false) {
  System.out.println(dirName + "does not exist");
} else {
  File[] files = directory.listFiles();
  for(int i=0; i<files.length; ++i)
  {
    if(files[i].isFile()) {
      System.out.println(files[i]);
    }
  }
}

Streams of Data

Low-Level File I/O

File outFile = new File("test.dat");
if(!outFile.isDirectory())
{
  try {
    if(!outFile.isFile())
    {
      outFile.createNewFile();
    }
    boolean append = true;
    FileOutputStream out = new FileOutputStream(outFile, append);
    out.write('a');
    out.write('d');
    out.write(1000000);
    out.write(-1000000);
    byte[] byteArray = { 5, 20, 32, 'C', 'T' };
    out.write(byteArray);
    System.out.println("Data written");
    out.close();
  }
  catch(FileNotFoundException e) {
    System.err.println("File not found");
    System.err.println(e.getMessage());
  }
  catch(IOException e) {
    System.err.println(e.getMessage());
  }
} else {
  System.err.println("Sorry.  We can't append to a directory");
}
File inFile = new File("test.dat");
if(inFile.isFile())
{
  try {
    FileInputStream in = new FileInputStream(inFile);
    int i = in.read();
    int j = in.read();
    int k = in.read();
    int l = in.read();
    int m = in.read();
    byte[] byteArray = new byte[5];
    if(5!=in.read(byteArray))
    {
      System.err.println("Couldn't find five bytes in the file");
    }
    System.out.println("Data read");
    in.close();
  }
  catch(FileNotFoundException e) {
    System.err.println("File not found");
    System.err.println(e.getMessage());
  }
  catch(IOException e) {
    System.err.println(e.getMessage());
  }
}

High-Level File I/O

File outFile = new File("test2.dat");
if(!outFile.isDirectory())
{
  try {
    if(!outFile.isFile())
    {
      outFile.createNewFile();
    }
    FileOutputStream out = new FileOutputStream(outFile, true);
    DataOutputStream dOut = new DataOutputStream(out);
    dOut.writeInt(43);
    dOut.writeBoolean(false);
    dOut.writeDouble(Math.PI);
    System.out.println("Data written");
    dOut.close();
    out.close();
  }
  catch(FileNotFoundException e) {
    System.err.println("File not found");
    System.err.println(e.getMessage());
  }
  catch(IOException e) {
    System.err.println(e.getMessage());
  }
} else {
  System.err.println("Sorry.  We can't append to a directory");
}
 
File inFile = new File("test.dat");
if(inFile.isFile())
{
  try {
    FileInputStream in = new FileInputStream(inFile);
    DataInputStream dIn = new DataInputStream(in);
    int i = dIn.readInt();
    boolean j = dIn.readBoolean();
    double k = dIn.readDouble();
    System.out.println("Data read");
  }
  catch(FileNotFoundException e) {
    System.err.println("File not found");
    System.err.println(e.getMessage());
  }
  catch(IOException e) {
    System.err.println(e.getMessage());
  }
}

Text File I/O

File outFile = new File("test.txt");
if(!outFile.isDirectory())
{
  try {
    if(!outFile.isFile())
    {
      outFile.createNewFile();
    }
    FileOutputStream outFS = new FileOutputStream(outFile, false);
    PrintWriter out = new PrintWriter(outFS);
    out.println("This is so much fun");
    System.out.println("Data written");
    out.close();
  }
  catch(FileNotFoundException e) {
    System.err.println("File not found");
    System.err.println(e.getMessage());
  }
  catch(IOException e) {
    System.err.println(e.getMessage());
  }
} else {
  System.err.println("Sorry.  We can't append to a directory");
}
File inFile = new File("test.txt");
if(inFile.isFile())
{
  try {
    FileInputStream inFS = new FileInputStream(inFile);
    Scanner in = new Scanner(inFS);
    while(in.hasNext())
    {
      System.out.println(in.next());
    }
    System.out.println("Data read");
  }
  catch(FileNotFoundException e) {
    System.err.println("File not found");
    System.err.println(e.getMessage());
  }
  catch(IOException e) {
    System.err.println(e.getMessage());
  }
}

Object File I/O

FileOutputStream fos = new FileOutputStream("test3.dat");
ObjectOutputStream out = new ObjectOutputStream(fos);
 
out.writeInt(178);
out.writeObject("I am a string");
out.writeObject(new Date());
 
out.close();
FileInputStream fis = new FileInputStream("test3.dat");
ObjectInputStream in = new ObjectInputStream(fis);
 
int i = in.readInt();
String phrase = (String)in.readObject();
Date date = (Date)in.readObject();
 
in.close();
class SomeSillyClass implements Serializable {
  // ...
}