Search code examples
javaio

File I/O producing gibberish on output


I'm learning File I/O using Java.

Following are my codes from two different Java files. One is "File" with the main class, the other is "FileWrite."

I was able to implement string input and output. But the output textfile has gibberish in the beginning and I am not sure why.

[File.Java]

package file;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class File {
    public static void main(String[] args) {

    try (BufferedReader br = new BufferedReader(new FileReader("B:\\fileIn.txt")))
            {
              String stCurrent;

              while ((stCurrent = br.readLine()) != null) {
                    System.out.println(stCurrent);
            }

            } catch (IOException e) {
                e.printStackTrace();
            } 
                    FileWrite fW = new FileWrite();
                    fW.serializeAddress("Boston", "Canada");
        }
}

[FileWrite.Java]

package file;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class FileWrite {

   public void serializeAddress(String city, String country) {
       try {
        FileOutputStream fout = new FileOutputStream("B:\\address.txt");
        ObjectOutputStream obOut = new ObjectOutputStream(fout);   
                obOut.writeUTF(city);
                obOut.writeUTF(country);
        obOut.close();
        System.out.println("Output Done");
       } catch(Exception ex) {
           ex.printStackTrace();
       }
   }
}

Now, on "obOut.writeUTF(city); obOut.writeUTF(country);" I separated out two string inputs. Is there a way to combine them into one? As in obOut.writeUTF(city, counry) instead of two. Or is this only achievable through making these into an object?

[Update] Imported a couple more and I tried

PrintStream ps = new PrintStream(new FileWriter("B:\\addressPS.txt")); 
ps.println(city); 
ps.println(country); 
ps.close(); 
But with errors, any clue?

Solution

  • You are doing the right thing keeping them separate already. City and country are different fields.

    A very common mistake is not making a distinction between binary and text files/socket streams. You are a mixing the two which will lead to confusion. I suggest you only sue text Writer/Reader or binary Input/OuptutStream unless you have a very clear idea of what you are doing.

    In short if you what to write text use

    PrintStream ps = new PrintStream(new FileWriter(textFileName));
    ps.println(city);
    ps.println(country);
    ps.close();