当前位置: 代码迷 >> J2SE >> 第一次发有关问题,有个io流有关问题请问,
  详细解决方案

第一次发有关问题,有个io流有关问题请问,

热度:253   发布时间:2016-04-24 18:07:45.0
第一次发问题,有个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();
  相关解决方案