DataInputStream


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 6 of 6

Thread: DataInputStream

  1. #1
    Join Date
    Oct 2004
    Posts
    34

    Question DataInputStream

    The following code takes the contents of one file and copies it to another file.
    How can I read the Ints from one file, add 10 to each int and put the results into another file as text?

    import java.io.*;

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

    FileInputStream inputFile = new FileInputStream("theints.txt");
    DataInputStream in = new DataInputStream(inputFile);

    FileOutputStream outputFile = new FileOutputStream("outagain.txt");
    DataOutputStream out = new DataOutputStream(outputFile);
    int c;


    while ((c = in.read()) != -1)
    out.write(c);



    in.close();
    out.close();
    }
    }

  2. #2
    Join Date
    Nov 2004
    Location
    Norway
    Posts
    1,560

    Use BufferedReader/BufferedWriter.

    Use BufferedReader/BufferedWriter instead of DataInputStream for this.
    The readInt() method of DataInputStream reads four bytes from the file
    and interprets that as a four byte int, I don't think that is a format suited
    for your .txt file.
    Code:
        BufferedReader br=new BufferedReader(new FileReader("c:\\tmp\\theints.txt"));
        BufferedWriter bw=new BufferedWriter(new FileWriter("c:\\tmp\\outagain.txt"));
        String line=null;
    
        while ( (line = br.readLine()) != null) {
          String[] intStr = line.split(" "); // if ints are separated by space
          String outLine = "";
          for (int i = 0; i < intStr.length; i++) {
            int n = Integer.parseInt(intStr[i]);
            outLine += (n + 10) + " ";
          }
          bw.write(outLine);
          bw.newLine();
        }
    
        br.close();
        bw.close();
    eschew obfuscation

  3. #3
    Join Date
    Oct 2004
    Posts
    34

    Question DataInputStream

    Thanks for the response. Good point on using the BufferReader. The program comples fine, but I get a runtime error(numberformatexception)... on line....
    int n = Integer.parseInt(intStr[i]);?

    Seems like it does not want to parse the elements in the array to ints?

    Thanks....

  4. #4
    Join Date
    Nov 2004
    Location
    Norway
    Posts
    1,560
    Integer.parseInt(String s) throws numberFormatException when the contents of
    s is not a stringrepresentation of an int. I have tested the code on an input file like this:

    3 1 2
    1 1 1 -1
    2 2 2 2
    3 3 3 3
    4 4 4 4
    5 5 5 5
    6 6 6 6
    7 7 7 7
    8 8 8 8
    0

    Remember, if the string has leading or trailing blanks. the parse fails, so a safe way is: Integer.parseInt(s.trim())
    Last edited by sjalle; 02-24-2005 at 09:54 AM.
    eschew obfuscation

  5. #5
    Join Date
    Oct 2004
    Posts
    34

    Question DataInputStream

    I'm still getting that format error?
    Here is what I have...and used the data from your example.


    BufferedReader br=new BufferedReader(new FileReader("intString.txt"));
    BufferedWriter bw=new BufferedWriter(new FileWriter("outagain.txt"));
    String line=null;

    while ( (line = br.readLine()) != null) {
    String[] intStr = line.split(" "); // if ints are separated by space
    String outLine = "";
    for (int i = 0; i < intStr.length; i++) {
    String s=intStr[i];
    int n = Integer.parseInt(s.trim()); <<points to this line?
    outLine += (n + 10) + " ";


    bw.write(outLine);
    bw.newLine();
    ...........................
    not sure if I have the trim set up right, or what I'm not processing?
    Thanks again...
    Last edited by marks20101; 02-24-2005 at 05:11 PM. Reason: Already posted thread

  6. #6
    Join Date
    Nov 2004
    Location
    Norway
    Posts
    1,560

    Try catching it

    I strongly suspect that the stringsplit yields other stuff than just integer
    strings. The trim() is not required in this case, since a split(" ") cannot yield
    strings w. leading or trailing blanks as the blank is the split delimiter.

    You should enclose the process in a try-catch to see what is happening:
    Code:
    BufferedReader br=new BufferedReader(new FileReader("intString.txt"));
    BufferedWriter bw=new BufferedWriter(new FileWriter("outagain.txt"));
    String line=null;
    
    while ( (line = br.readLine()) != null) {
      String[] intStr = line.split(" "); // if ints are separated by space
      String outLine = "";
      int n;
      for (int i = 0; i < intStr.length; i++) {
        String s=intStr[i];
        try { 
           n = Integer.parseInt(s); 
        } catch (NumberFormatException nfe) {
           System.out.println("the line: ["+line+"] failed integer conversion");
           System.out.println("Failure for :["+intStr[i]+"]");
           System.out.println(nfe.getMessage());
           System.out.println("Element was skipped");
           continue;
        }
        outLine += (n + 10) + " ";
        bw.write(outLine);
        bw.newLine();
      }
    }
    Also remember that parseInt(String s) fails for float and double values
    (values w. a decimal point).
    eschew obfuscation

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center