问答详情
源自:4-4 字节流之数据输入输出流

请问下为什么按照下面的程序写入TXT,TXT打开是乱码?

import java.io.DataOutputStream;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.io.InputStream;


public class DFileIO {


/**

* @param args

* DataOutputStream/DataInputStream  对“流”功能的扩展,可以更加方便地读取int,long,字符等基本数据类型

* @throws IOException 

*/

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

// TODO Auto-generated method stub

DataOutput("D:\\abc\\cc.txt");

//DataInput(new File("D:\\abc\\cc.txt"));

}

    public static void DataOutput(String file) throws IOException{//输入也可以是File类型,这两种都试过可以的

    DataOutputStream dop=new DataOutputStream(new FileOutputStream(file));

    dop.writeInt(10);

    dop.writeInt(-10);

    dop.writeLong(10L);

    dop.writeDouble(0.5);

    //采用utf-8编码写出utf-8编码中,中文占3个字节,英文1个字节

   

    dop.writeUTF("哈喽");

    //采用utf-16be编码写出,utf-16be编码中,中英文占2个字节

    dop.writeChars("哈楼");

    dop.close();

    FileIO.readFirst(file);        

    }

    public static void DataInput(File file) throws IOException{

    DataInputStream dis=new DataInputStream(new FileInputStream(file));

    int i=dis.readInt();

    System.out.println(i);

    i=dis.readInt();

    System.out.println(i);

    long l=dis.readLong();

    System.out.println(l);

    double d=dis.readDouble();

    System.out.println(d);

    String s=dis.readUTF();

    System.out.println(s);

    /*String s2=dis.readUTF();//会出现EOFException

    System.out.println(s2);*/

    char s2=dis.readChar();//读一个中字

    System.out.println(s2);

    char s3=dis.readChar();//读一个中字

    System.out.println(s3);

    dis.close();

   

    }

}


提问者:sadfiy 2017-07-13 19:37

个回答

  • FarFromAnyRoad
    2017-07-17 00:09:02
    已采纳

    为什么乱码

    肯定是乱码啊,  你使用了DataOutputStream,把int long String 都存了进去。你打开这个文件,使用系统的notepad程序,notepad程序不知道你这个什么编码,用了ansi,吧intlong什么都放在一起当GBK处理了。

    怎么做不乱码

    不要用记事本打开DataOutputStream创建的东西,看不到乱码,眼不见心不烦。

    你自己知道是什么,用DataInputStream或者InputStream能取出来用就行了。