I'm trying to create a file with FileOutputStream, but it always creates ANSI format like the picture below. I made all character encode settings on Eclipse and IntelliJ, but still same issue.
And here is my code:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
class Student implements Serializable{
int id;
String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
}
public class sss {
public static void main(String args[]){
try{
//Creating the object
Student s1 =new Student(211,"ravi");
//Creating stream and writing the object
FileOutputStream fout=new FileOutputStream("f.txt");
ObjectOutputStream out=new ObjectOutputStream(fout);
out.writeObject(s1);
out.flush();
//closing the stream
out.close();
System.out.println("success");
}catch(Exception e){System.out.println(e);}
}
}

Do not use
ObjectOutputStreamthere; that is for binary java objects. Avoid Serializable; it is practicably deprecated. Also Serializable also stores the class data.The "error" might be caused that the latest String class, which will hold Unicode, normally as array of UTF-16 chars, can also hold an ANSI byte array.
Also you hard-code a string (
new Student(211,"ravi");) which means that the editor saving the java source and the javac compiler must use the same encoding to generate a .class file. When not the string will be corrupted.