package io;import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class IoDemo {
public static void main(String[] args) throws IOException{
FileOutputStream  fos = 
new FileOutputStream("C:/Users/DELL/Desktop/文件输出流测试1.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF("中国");
dos.writeBytes("ab中国");
dos.writeChars("ab中国");
dos.flush();
dos.close();
}
}
文件里出现这样的乱码: 涓浗ab-? a bN-V?要怎么解决,我已经把文本改为utf-8的编码了,还是出现乱码

解决方案 »

  1.   

    DataOutputStream是字节流,而不是字符流。
    应该用字符流来写(FileWriter)FileWriter fw = new FileWriter("C:/Users/DELL/Desktop/文件输出流测试1.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("中国");
    bw.write("ab中国");
    bw.write("ab中国");
    bw.flush();
      

  2.   

    这样输出的是一个二进制文件,不是文本文件。
    使用 Writer。
    file -i 文件输出流测试1.txt
    文件输出流测试1.txt; application/octet-stream; charset=binary
      

  3.   

    使用字符字节转换流public class TTTTTTTT {
    public static void main(String[] args) throws IOException {
    FileOutputStream fos = new FileOutputStream("C:/文件输出流测试1.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    OutputStreamWriter osw = new OutputStreamWriter(bos);

    //DataOutputStream dos = new DataOutputStream(bos);
    osw.write("中国");
    /*
    dos.writeUTF("中国");
    dos.writeBytes("ab中国");
    dos.writeChars("ab中国");
    dos.flush();
    dos.close();
    */
    osw.flush();
    osw.close();
    }
    }
      

  4.   

    Windows使用的是GB18030编码,而Java使用的是Unicode编码。
    Java把文件写到系统硬盘里时,默认会使用系统的编码.
    在Window下在你把UTF写入时,就注定了要出现乱码。
    不过,看懂下面这个小例子,就可以解决这个问题了。public class TextFileReader {
        public static void main(String[] args) throws Exception {
            String filename = "source/demo-gb18030.txt";
            String encoding = "gb18030";
            printFile(filename, encoding);
        }    // 打印出文件的文本内容, 使用指定的编码读入文件
        public static void printFile(String filename, String encoding) throws IOException {
            InputStreamReader isr = new InputStreamReader(new FileInputStream(filename), encoding);
            BufferedReader reader = new BufferedReader(isr);
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
    }