日期:2014-05-20  浏览次数:20659 次

第一次发问题,有个io流问题请教,急
为什么在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

import java.io.*;

public class HomeWork5 {
FileReader fis;
BufferedReader bis;
char a;
int na,ne,ni,no,nu,nother;
public HomeWork5() {
try {
fis =……

------解决方案--------------------
楼上正解
------解决方案--------------------
楼上说的对。
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();
        }
    }

------解决方案--------------------
探讨

呼,我换了一个类。用PrintWriter,用他的print方法就写进去了。。这方法好吗

------解决方案--------------------
首先LZ你是将一个int类型的随机数赋值给a,然后就直接在控制台输出,肯定不出现乱码,而当你使用writeInt()将一个int类型的数写入一个文件时候,它会将int类型的数转换成4个字节和平台默认的字符编码写入的,所以你在打开文件的时候看到肯定是乱码。你可以这样:
String a = String.valueOf(random.nextInt(9999)); dos.writeUTF(a);dos.flush(); dos.close();