art3m1sm00n
art3m1sm00n

Reputation: 409

In java, when reading in a file one character at a time, how do I determine EOF?

I am having to read in a while and use an algorithm to code each letter and then print them to another file. I know generally to find the end of a file you would use readLine and check to see if its null. I am using a bufferedReader. Is there anyway to check to see if there is another character to read in? Basically, how do I know that I just read in the last character of the file?

I guess i could use readline and see if there was another line if I knew how to determine when I was at the end of my current line.

I found where the File class has a method called size() that supposidly turns the length in bytes of the file. Would that be telling me how many characters are in the file? Could i do while(charCount<length) ?

Upvotes: 0

Views: 20624

Answers (2)

gd1
gd1

Reputation: 11403

I don't exactly understand what you want to do. I guess you may want to read a file character by character. If so, you can do:

FileInputStream fileInput = new FileInputStream("file.txt");
int r;
while ((r = fileInput.read()) != -1) {
   char c = (char) r;
   // do something with the character c
}
fileInput.close();

FileInputStream.read() returns -1 when there are no more characters to read. It returns an int and not a char so a cast is mandatory.

Please note that this won't work if your file is in UTF-8 format and contains multi-byte characters. In that case you have to wrap the FileInputStream in an InputStreamReader and specify the appropriate charset. I'm omitting it here for the sake of simplicity.

Upvotes: 10

Saquib Mian
Saquib Mian

Reputation: 9

From my understanding, buffers will return -1 if there are no characters left. So you could write:

BufferedInputStream in = new BufferedInputStream(new FileInputStream("filename"));
while (currentChar = in.read() != -1) { 
    //do something 
}
in.close();

Upvotes: 0

Related Questions