weixin_42298593 2008-11-27 13:13
浏览 220
已采纳

写入文件为什么是乱码?

import java.io.*;
public class Test {
public static void main(String args[]){
try {
FileReader f=new FileReader( "E:\test.txt ");
BufferedReader in=new BufferedReader(f);
String s=null;
int i=0;
while ((s=in.readLine())!=null){
FileOutputStream out1 = new FileOutputStream( "E:\copytest.txt ");
BufferedOutputStream out2 = new BufferedOutputStream(out1,1);
DataOutputStream out = new DataOutputStream(out2);
out.writeUTF(s);
System.out.print(i+1+ " ");
System.out.println(s);
i++;
}
}catch(Exception e){
e.printStackTrace();
}

}

}
E:\copytest.txt 写入到这里的字符串是乱码?
另外要关那个流?

  • 写回答

3条回答 默认 最新

  • ageofnodoubt 2008-11-27 16:11
    关注

    1、兄弟,你这样写是不对的
    [code="java"]
    while ((s=in.readLine())!=null){
    FileOutputStream out1 = new FileOutputStream("E:\copytest.txt");
    BufferedOutputStream out2 = new BufferedOutputStream(out1,1);
    DataOutputStream out = new DataOutputStream(out2);
    ...
    }
    [/code]
    每次进循环都将copytest.txt文件清空了new FileOutputStream("E:\copytest.txt");
    应该把while里面前三行放在循环外面

    2、关闭流一般是从后往前关, 可以关的都关了最好, 顺序如out>out2>out1

    3、一般DataOutputStream是用于读取DataInputStream写进的文件

    4、另外,我用你的程序倒不会出现乱码

    5、一般的用法是,效率高,不会有乱码
    [code="java"]
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;

    public class TestCopyFile {

    /**
     * @param args
     */
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        BufferedReader br = null;
        BufferedWriter bw = null;
    
        try {
            fis = new FileInputStream("E:/test.txt");
            fos = new FileOutputStream("E:/copytest.txt");
            br = new BufferedReader(new InputStreamReader(fis));
            bw = new BufferedWriter(new OutputStreamWriter(fos));
    
            String str;
            while ((str = br.readLine()) != null) {
                bw.write(str);
                bw.newLine();
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally { // 从最后使用的关闭到最先使用的
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    bw = null;
                }
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    br = null;
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    fos = null;
                }
            }
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    fis = null;
                }
            }
        }
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了