Here's an example that demonstrates the problem. This program does not exit when FileReader is used. import java.io.*; class Main { public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: java Main <file>"); System.exit(-1); } try { // BufferedReader in = new BufferedReader(new FileReader(args[0])); Reader in = new FileReader(args[0]); // Reader in = new BufferedReader(new StringReader("This is a test")); char[] buf = new char[512]; int howmany; while (true) { if (in.ready()) { howmany = in.read(buf); if (howmany <= 0) { break; } else { System.out.println(new String(buf, 0, howmany)); } } else { try { Thread.sleep(1000); } catch (InterruptedException e) { // Thread.currentThread().interr upt(); System.err.println(e); break; } } } in.close(import java.io.*; class Main { public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: java Main <file>"); System.exit(-1); } try { // BufferedReader in = new BufferedReader(new FileReader(args[0])); Reader in = new FileReader(args[0]); // Reader in = new BufferedReader(new StringReader("This is a test")); char[] buf = new char[512]; int howmany; while (true) { if (in.ready()) { howmany = in.read(buf); if (howmany <= 0) { break; } else { System.out.println(new String(buf, 0, howmany)); } } else { try { Thread.sleep(1000); } catch (InterruptedException e) { // Thread.currentThread().interr upt(); System.err.println(e); break; } } } in.close(); } catch (IOException e) { e.printStackTrace(); } } } ); } catch (IOException e) { e.printStackTrace(); } } }
|