Need character output instead of numbers

Discussion in 'Java' started by bilsch, Apr 24, 2012.

  1. bilsch

    bilsch Guest

    Here is a simple example of reading a text file as integers and
    displaying each with blank spaces in between.

    > import java.io.*;
    >
    > public class Nvj3 {
    >
    > public static void main(String[] args){
    > try {
    > FileInputStream file = new FileInputStream("NVRAM.TXT");
    > boolean eof = false;
    > int count = 0;
    > while (!eof) {
    > int input = file.read();
    > System.out.print(input + " ");
    > if (input == -1)
    > eof = true;
    > else
    > count++;
    >
    >
    > }
    > System.out.println("Bytes read : " + count);
    >
    > } catch (IOException e){
    > System.out.println("Could not read file");
    > }
    >
    > }
    > }
    >


    OUTPUT is positive integers less than 128 (ASCII):
    78 86 82 65 77 44 32 86 101 114 115 105 111 110 32 49 46 50 48 13 10
    78 111 110 45 86 111 108 97 116 105 108 101 32 82 65 77 32 83 121 115

    I looked at the input file with a hex editor and the ASCII chars are all
    stored as bytes - not integers.

    I HAVE TWO QUESTIONS: the statement: int input = file.read();
    reads the file as a bunch of integer type values but the output is in
    character type. It seems like the correct input statement would be:
    char input = file.read();
    I tried that and it is an error. QUESTION 1): Can someone explain why
    the file is read as char type but the statement says int type?

    QUESTION 2) What do I need to do to get ASCII characters as output
    instead of numbers?

    TIA Bill (in Seattle, WA, USA)
    bilsch, Apr 24, 2012
    #1
    1. Advertising

  2. On 4/23/2012 6:58 PM, bilsch wrote:
    > Here is a simple example of reading a text file as integers and
    > displaying each with blank spaces in between.


    Also, don't multipost. It fragments the discussion.

    --
    Beware of bugs in the above code; I have only proved it correct, not
    tried it. -- Donald E. Knuth
    Joshua Cranmer, Apr 24, 2012
    #2
    1. Advertising

  3. bilsch

    Roedy Green Guest

    On Mon, 23 Apr 2012 16:58:05 -0700, bilsch <>
    wrote, quoted or indirectly quoted someone who said :

    >Here is a simple example of reading a text file as integers and
    >displaying each with blank spaces in between.


    It is hard to know where you are confused.

    So I will just tell you some things:

    public int read()
    throws IOException
    Reads the next byte of data from this input stream. The value byte is
    returned as an int in the range 0 to 255. If no byte is available
    because the end of the stream has been reached, the value -1 is
    returned. This method blocks until input data is available, the end of
    the stream is detected, or an exception is thrown.


    Note how read() reads one unsigned byte but returns an int so that is
    can use -1 as an eof marker.

    See http://mindprod.com/applet/fileio.html
    It will generate you code for pretty well any i/o purpose. Just tick
    off the boxes what you want.

    If you want to read binary 16 bit ints, you would use a
    DataInputStream.readShort or readChar

    To read 32 bit ints you would use readInt


    >I looked at the input file with a hex editor and the ASCII chars are all
    >stored as bytes - not integers.


    That is to be expected. ASCII files are always just a series of
    bytes. What did you hope to see?

    >QUESTION 2) What do I need to do to get ASCII characters as output

    instead of numbers?

    An ASCII file is string of bytes. You can look at them as chars with a
    text editor decimal bytes with a java progam like yours or hex bytes
    with a hex editor. They are just bits.

    If you are new to programming you may not have scaled the hump of
    understanding the difference between a binary number representation
    and a string of chars representation for the same value.

    See http://mindprod.com/jgloss/binary.html
    --
    Roedy Green Canadian Mind Products
    http://mindprod.com
    When you were a child, if you did your own experiment
    to see if it was better to put to cocoa into your cup first
    or the hot milk first, then you likely have the programmer gene..
    Roedy Green, Apr 24, 2012
    #3
  4. bilsch

    Lew Guest

    bilsch wrote:
    > Here is a simple example of reading a text file as integers and


    Strictly speaking, you can only read a text file as text, then convert (some of) that text to an integer.

    > displaying each with blank spaces in between.
    >
    > > import java.io.*;
    > >
    > > public class Nvj3 {
    > >
    > > public static void main(String[] args){
    > > try {
    > > FileInputStream file = new FileInputStream("NVRAM.TXT");
    > > boolean eof = false;
    > > int count = 0;
    > > while (!eof) {
    > > int input = file.read();
    > > System.out.print(input + " ");
    > > if (input == -1)
    > > eof = true;
    > > else
    > > count++;
    > >
    > >
    > > }
    > > System.out.println("Bytes read : " + count);
    > >
    > > } catch (IOException e){
    > > System.out.println("Could not read file");
    > > }
    > >
    > > }
    > > }
    > >

    >
    > OUTPUT is positive integers less than 128 (ASCII):
    > 78 86 82 65 77 44 32 86 101 114 115 105 111 110 32 49 46 50 48 13 10
    > 78 111 110 45 86 111 108 97 116 105 108 101 32 82 65 77 32 83 121 115
    >
    > I looked at the input file with a hex editor and the ASCII chars are all
    > stored as bytes - not integers.


    Right.

    > I HAVE TWO QUESTIONS: the statement: int input = file.read();
    > reads the file as a bunch of integer type values but the output is in
    > character type. It seems like the correct input statement would be:
    > char input = file.read();


    Nope. Read the Javadocs for that method, and you can clearly see that the return type is 'int'.

    > I tried that and it is an error. QUESTION 1): Can someone explain why
    > the file is read as char type but the statement says int type?


    First of all, your question is not valid. Nothing is read from any 'InputStream' as a 'char'. That only happens with 'Reader' types. 'InputStream#read()' returns values from zero to 255, inclusive, corresponding to the bytes in the file, until EOF when it returns -1.
    <http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()>

    Read the Javadocs. Also the part of Roedy's response that explains: "Note how read() reads one unsigned byte but returns an int so that is can use -1 as an eof marker." That is a restatement of what's in the Javadocs, so really you should read the Javadocs.

    > QUESTION 2) What do I need to do to get ASCII characters as output
    > instead of numbers?


    ASCII characters *are* numbers.

    What do you really want to do?

    I'd do something like:

    BufferedReader reader = new BufferedReader(new FileReader("NVRAM.TXT"));

    and use its methods to return 'String' values directly, but if I were counting bytes read, as you seem to want, I'd do basically what you already did.

    You can also convert byte arrays to 'String' values if you use other API methods and are very, very rigorous about character encoding. Are you?

    --
    Lew
    Lew, Apr 24, 2012
    #4
  5. bilsch

    bilsch Guest

    Thanks everyone for your help. I am new to Java and haven't done any
    programming in many years.
    bilsch, Apr 25, 2012
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Subra
    Replies:
    25
    Views:
    1,174
    user923005
    Mar 8, 2007
  2. Andrew Tatum

    Fibonacci Numbers and Lucas Numbers

    Andrew Tatum, May 26, 2007, in forum: C++
    Replies:
    6
    Views:
    545
    Howard
    May 27, 2007
  3. Lance Hoffmeyer
    Replies:
    2
    Views:
    513
    Lance Hoffmeyer
    Jul 26, 2007
  4. PerlFAQ Server
    Replies:
    0
    Views:
    111
    PerlFAQ Server
    Jan 16, 2011
  5. PerlFAQ Server
    Replies:
    0
    Views:
    123
    PerlFAQ Server
    Apr 17, 2011
Loading...

Share This Page