Java/File Input Output/Input Output Stream

Материал из Java эксперт
Перейти к: навигация, поиск

Buffer Equality

   <source lang="java">

// : c12:BufferEquality.java // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.nio.CharBuffer; public class BufferEquality {

 public static void main(String[] args) {
   CharBuffer cb1 = CharBuffer.allocate(5), cb2 = CharBuffer.allocate(5);
   cb1.put("B").put("u").put("f").put("f").put("A");
   cb2.put("B").put("u").put("f").put("f").put("B");
   cb1.rewind();
   cb2.rewind();
   System.out.println(cb1.limit(4).equals(cb2.limit(4)));
   // Should be "true"
 }

} ///:~

      </source>
   
  
 
  



Comparing Buffered and Unbuffered Writing Performance

   <source lang="java">

import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Date; public class BufferDiff {

 public static void main(String args[]) throws IOException {
   FileOutputStream unbufStream;
   BufferedOutputStream bufStream;
   unbufStream = new FileOutputStream("test.one");
   bufStream = new BufferedOutputStream(new FileOutputStream("test.two"));
   System.out.println("Write file unbuffered: " + time(unbufStream) + "ms");
   System.out.println("Write file  buffered: " + time(bufStream) + "ms");
 }
 static int time(OutputStream os) throws IOException {
   Date then = new Date();
   for (int i = 0; i < 500000; i++) {
     os.write(1);
   }
   os.close();
   return (int) ((new Date()).getTime() - then.getTime());
 }

}

      </source>
   
  
 
  



Converting text to and from ByteBuffers

   <source lang="java">

// : c12:BufferToText.java // Converting text to and from ByteBuffers // {Clean: data2.txt} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; public class BufferToText {

 private static final int BSIZE = 1024;
 public static void main(String[] args) throws Exception {
   FileChannel fc = new FileOutputStream("data2.txt").getChannel();
   fc.write(ByteBuffer.wrap("Some text".getBytes()));
   fc.close();
   fc = new FileInputStream("data2.txt").getChannel();
   ByteBuffer buff = ByteBuffer.allocate(BSIZE);
   fc.read(buff);
   buff.flip();
   // Doesn"t work:
   System.out.println(buff.asCharBuffer());
   // Decode using this system"s default Charset:
   buff.rewind();
   String encoding = System.getProperty("file.encoding");
   System.out.println("Decoded using " + encoding + ": "
       + Charset.forName(encoding).decode(buff));
   // Or, we could encode with something that will print:
   fc = new FileOutputStream("data2.txt").getChannel();
   fc.write(ByteBuffer.wrap("Some text".getBytes("UTF-16BE")));
   fc.close();
   // Now try reading again:
   fc = new FileInputStream("data2.txt").getChannel();
   buff.clear();
   fc.read(buff);
   buff.flip();
   System.out.println(buff.asCharBuffer());
   // Use a CharBuffer to write through:
   fc = new FileOutputStream("data2.txt").getChannel();
   buff = ByteBuffer.allocate(24); // More than needed
   buff.asCharBuffer().put("Some text");
   fc.write(buff);
   fc.close();
   // Read and display:
   fc = new FileInputStream("data2.txt").getChannel();
   buff.clear();
   fc.read(buff);
   buff.flip();
   System.out.println(buff.asCharBuffer());
 }

} ///:~


      </source>
   
  
 
  



Creating a very large file using mapping

   <source lang="java">

// : c12:LargeMappedFiles.java // Creating a very large file using mapping. // {RunByHand} // {Clean: test.dat} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class LargeMappedFiles {

 static int length = 0x8FFFFFF; // 128 Mb
 public static void main(String[] args) throws Exception {
   MappedByteBuffer out = new RandomAccessFile("test.dat", "rw")
       .getChannel().map(FileChannel.MapMode.READ_WRITE, 0, length);
   for (int i = 0; i < length; i++)
     out.put((byte) "x");
   System.out.println("Finished writing");
   for (int i = length / 2; i < length / 2 + 6; i++)
     System.out.print((char) out.get(i));
 }

} ///:~


      </source>
   
  
 
  



Demonstrate ProgressMeterInputStream

   <source lang="java">

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import javax.swing.*; import java.io.*; /**

* Demonstrate ProgressMeterInputStream.
*
* @author  Ian Darwin, http://www.darwinsys.ru/
* @version  $Id: ProgressMeterStrmDemo.java,v 1.5 2004/02/23 03:39:22 ian Exp $
*/

public class ProgressMeterStrmDemo extends JFrame implements Runnable {

 public void readTheFile() throws IOException {
   // OK, we"re going to read a file. Do it...
   FileInputStream is = new FileInputStream("index.htm");
   BufferedReader ds = new BufferedReader(
     new InputStreamReader(
       new ProgressMonitorInputStream(this,
         "Loading...", new FileInputStream("index.htm"))));
   // Now read it...
   String line;
   while ((line = ds.readLine()) != null) {
     if (System.getProperties().getProperty("debug.lines")!=null)
       System.err.println("Read this line: " + line);
     try {
       Thread.sleep(200);    // slow it down a bit.
     } catch(InterruptedException e) {
       return;
     }
   }
   // Close file, since it was opened.
   ds.close();
 }
 /** We use a separate "thread" (see Threads chapter) to do the reading,
  * so the GUI can run independantly (since we have "sleep" calls to make
  * it appear to run more slowly).
  */
 public void run() {
   try {
     readTheFile();
   } catch (EOFException nme) {
     return;
   } catch (IOException e) {
     System.err.println(e.toString());
     return;
   }
 }
 public ProgressMeterStrmDemo() {
   new Thread(this).start();
 }
 public static void main(String[] av) {
   ProgressMeterStrmDemo demo = new ProgressMeterStrmDemo();
   demo.setSize(100, 100);
   demo.getContentPane().add(new JLabel("ProgressMeterStrmDemo"));
   demo.pack();
   demo.setVisible(true);
 } 

}


      </source>
   
  
 
  



Demonstrates standard I/O redirection

   <source lang="java">

// : c12:Redirecting.java // Demonstrates standard I/O redirection. // {Clean: test.out} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; public class Redirecting {

 // Throw exceptions to console:
 public static void main(String[] args) throws IOException {
   PrintStream console = System.out;
   BufferedInputStream in = new BufferedInputStream(new FileInputStream(
       "Redirecting.java"));
   PrintStream out = new PrintStream(new BufferedOutputStream(
       new FileOutputStream("test.out")));
   System.setIn(in);
   System.setOut(out);
   System.setErr(out);
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   String s;
   while ((s = br.readLine()) != null)
     System.out.println(s);
   out.close(); // Remember this!
   System.setOut(console);
 }

} ///:~


      </source>
   
  
 
  



Demonstrates the use of the File class to create directories and manipulate files

   <source lang="java">

// : c12:MakeDirectories.java // Demonstrates the use of the File class to // create directories and manipulate files. // {Args: MakeDirectoriesTest} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.File; public class MakeDirectories {

 private static void usage() {
   System.err.println("Usage:MakeDirectories path1 ...\n"
       + "Creates each path\n"
       + "Usage:MakeDirectories -d path1 ...\n"
       + "Deletes each path\n"
       + "Usage:MakeDirectories -r path1 path2\n"
       + "Renames from path1 to path2");
   System.exit(1);
 }
 private static void fileData(File f) {
   System.out.println("Absolute path: " + f.getAbsolutePath()
       + "\n Can read: " + f.canRead() + "\n Can write: "
       + f.canWrite() + "\n getName: " + f.getName()
       + "\n getParent: " + f.getParent() + "\n getPath: "
       + f.getPath() + "\n length: " + f.length()
       + "\n lastModified: " + f.lastModified());
   if (f.isFile())
     System.out.println("It"s a file");
   else if (f.isDirectory())
     System.out.println("It"s a directory");
 }
 public static void main(String[] args) {
   if (args.length < 1)
     usage();
   if (args[0].equals("-r")) {
     if (args.length != 3)
       usage();
     File old = new File(args[1]), rname = new File(args[2]);
     old.renameTo(rname);
     fileData(old);
     fileData(rname);
     return; // Exit main
   }
   int count = 0;
   boolean del = false;
   if (args[0].equals("-d")) {
     count++;
     del = true;
   }
   count--;
   while (++count < args.length) {
     File f = new File(args[count]);
     if (f.exists()) {
       System.out.println(f + " exists");
       if (del) {
         System.out.println("deleting..." + f);
         f.delete();
       }
     } else { // Doesn"t exist
       if (!del) {
         f.mkdirs();
         System.out.println("created " + f);
       }
     }
     fileData(f);
   }
 }

} ///:~

      </source>
   
  
 
  



File read and write

   <source lang="java">

/* Software Architecture Design Patterns in Java by Partha Kuchana Auerbach Publications

  • /

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Vector; public class FileUtil {

 DataOutputStream dos;
 /*
  * Utility method to write a given text to a file
  */
 public boolean writeToFile(String fileName, String dataLine,
     boolean isAppendMode, boolean isNewLine) {
   if (isNewLine) {
     dataLine = "\n" + dataLine;
   }
   try {
     File outFile = new File(fileName);
     if (isAppendMode) {
       dos = new DataOutputStream(new FileOutputStream(fileName, true));
     } else {
       dos = new DataOutputStream(new FileOutputStream(outFile));
     }
     dos.writeBytes(dataLine);
     dos.close();
   } catch (FileNotFoundException ex) {
     return (false);
   } catch (IOException ex) {
     return (false);
   }
   return (true);
 }
 /*
  * Reads data from a given file
  */
 public String readFromFile(String fileName) {
   String DataLine = "";
   try {
     File inFile = new File(fileName);
     BufferedReader br = new BufferedReader(new InputStreamReader(
         new FileInputStream(inFile)));
     DataLine = br.readLine();
     br.close();
   } catch (FileNotFoundException ex) {
     return (null);
   } catch (IOException ex) {
     return (null);
   }
   return (DataLine);
 }
 public boolean isFileExists(String fileName) {
   File file = new File(fileName);
   return file.exists();
 }
 public boolean deleteFile(String fileName) {
   File file = new File(fileName);
   return file.delete();
 }
 /*
  * Reads data from a given file into a Vector
  */
 public Vector fileToVector(String fileName) {
   Vector v = new Vector();
   String inputLine;
   try {
     File inFile = new File(fileName);
     BufferedReader br = new BufferedReader(new InputStreamReader(
         new FileInputStream(inFile)));
     while ((inputLine = br.readLine()) != null) {
       v.addElement(inputLine.trim());
     }
     br.close();
   } // Try
   catch (FileNotFoundException ex) {
     //
   } catch (IOException ex) {
     //
   }
   return (v);
 }
 /*
  * Writes data from an input vector to a given file
  */
 public void vectorToFile(Vector v, String fileName) {
   for (int i = 0; i < v.size(); i++) {
     writeToFile(fileName, (String) v.elementAt(i), true, true);
   }
 }
 /*
  * Copies unique rows from a source file to a destination file
  */
 public void copyUniqueElements(String sourceFile, String resultFile) {
   Vector v = fileToVector(sourceFile);
   v = MiscUtil.removeDuplicates(v);
   vectorToFile(v, resultFile);
 }

} // end FileUtil class MiscUtil {

 public static boolean hasDuplicates(Vector v) {
   int i = 0;
   int j = 0;
   boolean duplicates = false;
   for (i = 0; i < v.size() - 1; i++) {
     for (j = (i + 1); j < v.size(); j++) {
       if (v.elementAt(i).toString().equalsIgnoreCase(
           v.elementAt(j).toString())) {
         duplicates = true;
       }
     }
   }
   return duplicates;
 }
 public static Vector removeDuplicates(Vector s) {
   int i = 0;
   int j = 0;
   boolean duplicates = false;
   Vector v = new Vector();
   for (i = 0; i < s.size(); i++) {
     duplicates = false;
     for (j = (i + 1); j < s.size(); j++) {
       if (s.elementAt(i).toString().equalsIgnoreCase(
           s.elementAt(j).toString())) {
         duplicates = true;
       }
     }
     if (duplicates == false) {
       v.addElement(s.elementAt(i).toString().trim());
     }
   }
   return v;
 }
 public static Vector removeDuplicateDomains(Vector s) {
   int i = 0;
   int j = 0;
   boolean duplicates = false;
   String str1 = "";
   String str2 = "";
   Vector v = new Vector();
   for (i = 0; i < s.size(); i++) {
     duplicates = false;
     for (j = (i + 1); j < s.size(); j++) {
       str1 = "";
       str2 = "";
       str1 = s.elementAt(i).toString().trim();
       str2 = s.elementAt(j).toString().trim();
       if (str1.indexOf("@") > -1) {
         str1 = str1.substring(str1.indexOf("@"));
       }
       if (str2.indexOf("@") > -1) {
         str2 = str2.substring(str2.indexOf("@"));
       }
       if (str1.equalsIgnoreCase(str2)) {
         duplicates = true;
       }
     }
     if (duplicates == false) {
       v.addElement(s.elementAt(i).toString().trim());
     }
   }
   return v;
 }
 public static boolean areVectorsEqual(Vector a, Vector b) {
   if (a.size() != b.size()) {
     return false;
   }
   int i = 0;
   int vectorSize = a.size();
   boolean identical = true;
   for (i = 0; i < vectorSize; i++) {
     if (!(a.elementAt(i).toString().equalsIgnoreCase(b.elementAt(i)
         .toString()))) {
       identical = false;
     }
   }
   return identical;
 }
 public static Vector removeDuplicates(Vector a, Vector b) {
   int i = 0;
   int j = 0;
   boolean present = true;
   Vector v = new Vector();
   for (i = 0; i < a.size(); i++) {
     present = false;
     for (j = 0; j < b.size(); j++) {
       if (a.elementAt(i).toString().equalsIgnoreCase(
           b.elementAt(j).toString())) {
         present = true;
       }
     }
     if (!(present)) {
       v.addElement(a.elementAt(i));
     }
   }
   return v;
 }

}// end of class


      </source>
   
  
 
  



Input and output of arrays and objects with binary files

   <source lang="java">

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class InputOutputDemoObjectBinaryFile {

 public static void main(String[] a) throws Exception {
   //Write an object or array to binary file "jexpObject.dat":
   ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
       "jexpObject.dat"));
   oos.writeObject(new int[] { 2, 3, 5, 7, 11 });
   oos.close();
   //Read objects or arrays from binary file "o.dat":
   ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
       "jexpObject.dat"));
   int[] ia = (int[]) (ois.readObject());
   System.out.println(ia[0] + "," + ia[1] + "," + ia[2] + "," + ia[3]
       + "," + ia[4]);
 }

}

      </source>
   
  
 
  



Input and output of primitive values with binary files

   <source lang="java">

import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class InputOutputDemoBinaryFile {

 public static void main(String[] a) throws Exception {
   //Write primitive values to a binary file "jexp.dat":
   DataOutputStream dos = new DataOutputStream(new FileOutputStream(
       "jexp.dat"));
   dos.writeInt(228);
   dos.writeChar(" ");
   dos.writeUTF("Java Source and Support at www.jexp.ru");
   dos.close();
   //Read primitive values from binary file "jexp.dat":
   DataInputStream dis = new DataInputStream(new FileInputStream(
       "jexp.dat"));
   System.out.println(dis.readInt() + "|" + dis.readChar() + "|"
       + dis.readUTF());
 }

}

      </source>
   
  
 
  



Input and output of primitive values with random access binary files

   <source lang="java">

import java.io.RandomAccessFile; public class InputOutputDemoPrimitive {

 public static void main(String[] a) throws Exception {
   //Read and write parts of file "raf.dat" in arbitrary order:
   RandomAccessFile raf = new RandomAccessFile("r.dat", "rw");
   raf.writeDouble(3.1415);
   raf.writeInt(42);
   raf.seek(0);
   System.out.println(raf.readDouble() + " " + raf.readInt());
 }

}


      </source>
   
  
 
  



Input and output using strings and string buffers

   <source lang="java">

import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.io.RandomAccessFile; import java.io.Reader; import java.io.StreamTokenizer; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; public class InputOutputDemoString {

 public static void main(String[] a) throws Exception {
   //Read from a String s as if it were a text file:
   Reader r = new StringReader("abc");
   System.out.println("abc: " + (char) r.read() + (char) r.read()
       + (char) r.read());
   //Write to a StringBuffer as if it were a text file:
   Writer sw = new StringWriter();
   sw.write("d");
   sw.write("e");
   sw.write("f");
   System.out.println(sw.toString());
 }

}

      </source>
   
  
 
  



Input and output with human-readable text files

   <source lang="java">

import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; public class InputOutputDemo {

 public static void main(String[] a) throws Exception {
   PrintWriter pwr = new PrintWriter(new FileWriter("jexp.txt"));
   pwr.print(4711);
   pwr.print(" ");
   pwr.print("Java Source and Support at www.jexp.ru");
   pwr.close();
   StreamTokenizer stok = new StreamTokenizer(new FileReader("jexp.txt"));
   int tok = stok.nextToken();
   while (tok != StreamTokenizer.TT_EOF) {
     System.out.println(stok.sval);
     tok = stok.nextToken();
   }
 }

}

      </source>
   
  
 
  



Locking portions of a mapped file

   <source lang="java">

// : c12:LockingMappedFiles.java // Locking portions of a mapped file. // {RunByHand} // {Clean: test.dat} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; public class LockingMappedFiles {

 static final int LENGTH = 0x8FFFFFF; // 128 Mb
 static FileChannel fc;
 public static void main(String[] args) throws Exception {
   fc = new RandomAccessFile("test.dat", "rw").getChannel();
   MappedByteBuffer out = fc
       .map(FileChannel.MapMode.READ_WRITE, 0, LENGTH);
   for (int i = 0; i < LENGTH; i++)
     out.put((byte) "x");
   new LockAndModify(out, 0, 0 + LENGTH / 3);
   new LockAndModify(out, LENGTH / 2, LENGTH / 2 + LENGTH / 4);
 }
 private static class LockAndModify extends Thread {
   private ByteBuffer buff;
   private int start, end;
   LockAndModify(ByteBuffer mbb, int start, int end) {
     this.start = start;
     this.end = end;
     mbb.limit(end);
     mbb.position(start);
     buff = mbb.slice();
     start();
   }
   public void run() {
     try {
       // Exclusive lock with no overlap:
       FileLock fl = fc.lock(start, end, false);
       System.out.println("Locked: " + start + " to " + end);
       // Perform modification:
       while (buff.position() < buff.limit() - 1)
         buff.put((byte) (buff.get() + 1));
       fl.release();
       System.out.println("Released: " + start + " to " + end);
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
 }

} ///:~


      </source>
   
  
 
  



Mapped IO

   <source lang="java">

// : c12:MappedIO.java // {Clean: temp.tmp} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.IntBuffer; import java.nio.channels.FileChannel; public class MappedIO {

 private static int numOfInts = 4000000;
 private static int numOfUbuffInts = 200000;
 private abstract static class Tester {
   private String name;
   public Tester(String name) {
     this.name = name;
   }
   public long runTest() {
     System.out.print(name + ": ");
     try {
       long startTime = System.currentTimeMillis();
       test();
       long endTime = System.currentTimeMillis();
       return (endTime - startTime);
     } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
   public abstract void test() throws IOException;
 }
 private static Tester[] tests = { new Tester("Stream Write") {
   public void test() throws IOException {
     DataOutputStream dos = new DataOutputStream(
         new BufferedOutputStream(new FileOutputStream(new File(
             "temp.tmp"))));
     for (int i = 0; i < numOfInts; i++)
       dos.writeInt(i);
     dos.close();
   }
 }, new Tester("Mapped Write") {
   public void test() throws IOException {
     FileChannel fc = new RandomAccessFile("temp.tmp", "rw")
         .getChannel();
     IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
         .asIntBuffer();
     for (int i = 0; i < numOfInts; i++)
       ib.put(i);
     fc.close();
   }
 }, new Tester("Stream Read") {
   public void test() throws IOException {
     DataInputStream dis = new DataInputStream(new BufferedInputStream(
         new FileInputStream("temp.tmp")));
     for (int i = 0; i < numOfInts; i++)
       dis.readInt();
     dis.close();
   }
 }, new Tester("Mapped Read") {
   public void test() throws IOException {
     FileChannel fc = new FileInputStream(new File("temp.tmp"))
         .getChannel();
     IntBuffer ib = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size())
         .asIntBuffer();
     while (ib.hasRemaining())
       ib.get();
     fc.close();
   }
 }, new Tester("Stream Read/Write") {
   public void test() throws IOException {
     RandomAccessFile raf = new RandomAccessFile(new File("temp.tmp"),
         "rw");
     raf.writeInt(1);
     for (int i = 0; i < numOfUbuffInts; i++) {
       raf.seek(raf.length() - 4);
       raf.writeInt(raf.readInt());
     }
     raf.close();
   }
 }, new Tester("Mapped Read/Write") {
   public void test() throws IOException {
     FileChannel fc = new RandomAccessFile(new File("temp.tmp"), "rw")
         .getChannel();
     IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
         .asIntBuffer();
     ib.put(0);
     for (int i = 1; i < numOfUbuffInts; i++)
       ib.put(ib.get(i - 1));
     fc.close();
   }
 } };
 public static void main(String[] args) {
   for (int i = 0; i < tests.length; i++)
     System.out.println(tests[i].runTest());
 }

} ///:~


      </source>
   
  
 
  



Mapping an entire file into memory for reading

   <source lang="java">

// : c12:MappedFile.java // Mapping an entire file into memory for reading. // {Args: MappedFile.java} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.File; import java.io.FileInputStream; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class MappedFile {

 public static void main(String[] args) throws Exception {
   if (args.length != 1) {
     System.out.println("argument: sourcefile");
     System.exit(1);
   }
   long length = new File(args[0]).length();
   MappedByteBuffer in = new FileInputStream(args[0]).getChannel().map(
       FileChannel.MapMode.READ_ONLY, 0, length);
   int i = 0;
   while (i < length)
     System.out.print((char) in.get(i++));
 }

} ///:~


      </source>
   
  
 
  



Read a file and print, using LineReader and System.out

   <source lang="java">

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

import java.io.*; /**

* Read a file and print, using LineReader and System.out
*/

public class DropReceivedLines {

   public static void main(String[] av) {
       DropReceivedLines d = new DropReceivedLines();
   // For stdin, act as a filter. For named files,
   // update each file in place (safely, by creating a new file).
   try {
     if (av.length == 0) 
       d.process(new BufferedReader(
           new InputStreamReader(System.in)), 
           new PrintWriter(System.out));
     else for (int i=0; i<av.length; i++)
       d.process(av[i]);
   } catch (FileNotFoundException e) {
     System.err.println(e.getMessage());
   } catch (IOException e) {
     System.err.println("I/O error " + e);
   }
   }
 protected static File tempFile = new File("holding.tmp");
 /** Process one file given only its name */
 public void process(String fileName) throws IOException {
   File old = new File(fileName);
   String newFileName = fileName + ".TMP";
   File newf = new File(newFileName);
   BufferedReader is =
       new BufferedReader(new FileReader(fileName));
   PrintWriter p = new PrintWriter(new FileWriter(newFileName));
   process(is, p);    // call other process(), below
   p.close();
   old.renameTo(tempFile);
   newf.renameTo(old);
   tempFile.delete();
 }
   /** process one file, given an open LineReader */
   public void process(BufferedReader is, PrintWriter out)
   throws IOException {
       try {
           String lin;
     // If line begins with "Received:", ditch it, and its continuations
           while ((lin = is.readLine()) != null) {
       if (lin.startsWith("Received:")) {
         do {
           lin = is.readLine();
         } while (lin.length() > 0 &&
           Character.isWhitespace(lin.charAt(0)));
       }
       out.println(lin);
           }
           is.close();
     out.close();
       } catch (IOException e) {
           System.out.println("IOException: " + e);
       }
   }

}


      </source>
   
  
 
  



Reading Bytes from a DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class EOF {

 public static void main(String args[]) {
   DataInputStream is = null;
   byte ch;
   try {
     is = new DataInputStream(new FileInputStream("EOF.java"));
     while (true) { // exception deals catches EOF
       ch = is.readByte();
       System.out.print((char) ch);
       System.out.flush();
     }
   } catch (EOFException eof) {
     System.out.println(" >> Normal program termination.");
   } catch (FileNotFoundException noFile) {
     System.err.println("File not found! " + noFile);
   } catch (IOException io) {
     System.err.println("I/O error occurred: " + io);
   } catch (Throwable anything) {
     System.err.println("Abnormal exception caught !: " + anything);
   } finally {
     if (is != null) {
       try {
         is.close();
       } catch (IOException ignored) {
       }
     }
   }
 }

}

      </source>
   
  
 
  



Timing Unbuffered Reads

   <source lang="java">

import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.util.Date; public class Unbuffered {

 public static void main(String args[]) {
   Reader reader;
   int ch;
   System.out.println("Start! " + new Date());
   try {
     reader = new FileReader(args[0]);
     while ((ch = reader.read()) != -1) {
       // read entire file
     }
   } catch (IOException io) {
     System.err.println(io);
     System.exit(-1);
   }
   System.out.println("Stop! " + new Date());
 }

}

      </source>
   
  
 
  



What happens when the entire file isn"t in your mapping region

   <source lang="java">

// : c12:MappedReader.java // What happens when the entire file // isn"t in your mapping region? // {ThrowsException} // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. import java.io.FileInputStream; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class MappedReader {

 private static final int LENGTH = 100; // Small
 public static void main(String[] args) throws Exception {
   if (args.length != 1) {
     System.out.println("argument: sourcefile");
     System.exit(1);
   }
   MappedByteBuffer in = new FileInputStream(args[0]).getChannel().map(
       FileChannel.MapMode.READ_ONLY, 0, LENGTH);
   int i = 0;
   while (i < LENGTH)
     System.out.print((char) in.get(i++));
   System.out.println((char) in.get(i++));
 }

} ///:~


      </source>