Solved

readChar() method and EOF exception

Posted on 2002-03-21
6
364 Views
Last Modified: 2010-05-18
I am a CS major and am trying to improve on my programming skills, but I have come across a roadblock. I am using the readChar() method to read characters one by one from a specified file and almost everything is going smoothly except that I am not sure on the most efficient way to let my program know it has reached the end of a file. I am trying to use the End Of File execption, but it still reads on forever. I pasted my code here for an illustration. Any pointers?

- Alex


import java.io.*;

public class FileDemo {
    public static void main(String[] args) throws IOException {

     if (args.length < 1){
         System.out.println("Program syntax: java FileDemo FILE.XXX");
         System.exit(1);
     }

     DataInputStream in = new DataInputStream(
                          new FileInputStream(args[0]));

     InputStreamReader isr = new InputStreamReader(in);


     System.out.println("<<Start of file>>");


     try {
         char newChar = (char) isr.read();
         while(true) {
          System.out.print(newChar);
          newChar = (char) isr.read();
         }
     } catch (EOFException e) { }
     in.close();
     
     System.out.println("<<End of file>>");    
    }
}
0
Comment
Question by:alrav79
  • 3
  • 3
6 Comments
 
LVL 4

Accepted Solution

by:
m_onkey_boy earned 50 total points
ID: 6887452
int c;
while ((c = isr.read()) != -1) {
  System.out.println((char)c);
}
0
 
LVL 4

Expert Comment

by:m_onkey_boy
ID: 6887462
BTW - in your example, DataInputStream is not adding anything to your program other than overhead.
0
 

Author Comment

by:alrav79
ID: 6887479
what do you mean overhead?
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:alrav79
ID: 6887507
could have explained the process a litte more
0
 
LVL 4

Expert Comment

by:m_onkey_boy
ID: 6888103
You didn't give me a chance to elaborate - you could have asked.

OK:

What I meant by overhead was that by using the datainputstream, you have instantiated an object tha was not needed.  Also, each call to read() is being passed up an extra method call (InputStreamReader.read() calls DataInputStream.read(), which in turn calls FileInputStream.read()).  Why not cut out the middleman?

As far as explaining the process - the code is self-explanatory.  I guess the part you should notice is that -1 is the EOF marker in a Java stream.
0
 

Author Comment

by:alrav79
ID: 6888508
sorry, man, that was my fault....thanks for the explanation though; it was very helpful
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now