請問下為什么按照下面的程序?qū)懭隩XT,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,字符等基本數(shù)據(jù)類型
* @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個字節(jié),英文1個字節(jié)
? ?
? ? dop.writeUTF("哈嘍");
? ? //采用utf-16be編碼寫出,utf-16be編碼中,中英文占2個字節(jié)
? ? 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();//會出現(xiàn)EOFException
? ? System.out.println(s2);*/
? ? char s2=dis.readChar();//讀一個中字
? ? System.out.println(s2);
? ? char s3=dis.readChar();//讀一個中字
? ? System.out.println(s3);
? ? dis.close();
? ?
? ? }
}
2017-07-17
為什么亂碼
肯定是亂碼啊,? 你使用了DataOutputStream,把int long String 都存了進去。你打開這個文件,使用系統(tǒng)的notepad程序,notepad程序不知道你這個什么編碼,用了ansi,吧intlong什么都放在一起當(dāng)GBK處理了。
怎么做不亂碼
不要用記事本打開DataOutputStream創(chuàng)建的東西,看不到亂碼,眼不見心不煩。
你自己知道是什么,用DataInputStream或者InputStream能取出來用就行了。