为什么在a.txt的字数是乱码的,而在控制台打印出来不是乱码,怎么解决打印到a.txt乱码问题
- Java code
public class HomeWork6 { Random random; FileOutputStream fos; DataOutputStream dos; public HomeWork6() { try { random = new Random(); fos = new FileOutputStream("E:\\Think in java\\a.txt"); dos = new DataOutputStream(fos); for(int i=0;i<10;i++) { int a=random.nextInt(9999); System.out.println(a); dos.writeInt(a); } fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new HomeWork6(); }}
------解决方案--------------------
你用的是序列化 这并不是乱码 是保存了类型信息的二进制 你用文本打开自然是乱码样子
你直接用fos.wirte(String.valueOf(a).getBytes()) 相当于把int当字符串写出去
或者用dos.writeObject(String.valueOf(a)) 字符串序列化就是一个字符串
------解决方案--------------------
------解决方案--------------------
楼上正解
------解决方案--------------------
楼上说的对。
- Java code
public TestInput() { try { random = new Random(); fos = new FileOutputStream("E:a.txt"); dos = new DataOutputStream(fos); for(int i=0;i<10;i++) { int a=random.nextInt(9999); System.out.println(a); fos.write(String.valueOf(a).getBytes()); } fos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
------解决方案--------------------
------解决方案--------------------
首先LZ你是将一个int类型的随机数赋值给a,然后就直接在控制台输出,肯定不出现乱码,而当你使用writeInt()将一个int类型的数写入一个文件时候,它会将int类型的数转换成4个字节和平台默认的字符编码写入的,所以你在打开文件的时候看到肯定是乱码。你可以这样:
String a = String.valueOf(random.nextInt(9999)); dos.writeUTF(a);dos.flush(); dos.close();