日期:2014-05-20  浏览次数:20704 次

关于输入输出流的两个问题
Java code
public static void main(String[] args) throws IOException {

        FileWriter fw = new FileWriter("c:/s1.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        FileReader fr = new FileReader("c:/s1.txt");
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw2 = new FileWriter("c:/s2.txt");
        BufferedWriter bw2 = new BufferedWriter(fw);
        
         bw.write("明月几时有,把酒问青天。");

//尝试将这一句改为 bw.write("明月几时有,把酒问青天。\n");
//却没有实现换行,为什么?

         bw.newLine();
         bw.write("不知天上宫阙,今夕是何年。");

        System.out.println("Copying in progress......");

        while(br.ready()){
            bw2.write(br.readLine());
        }
//通过上面的循环,本意是将s1.txt中的文字复制到s2.txt中的,结果,发现s2文件为空!!
//经过调试发现,原来br.readline()竟然为null!!为什么??
        System.out.println("Success!");

        bw.close();
        fw.close();
        fr.close();
        br.close();
        bw2.close();
        fw2.close();
    }


------解决方案--------------------
Java code

    public static void main(String[] args) throws IOException {
    FileWriter fw = new FileWriter("c:/s1.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("明月几时有,把酒问青天。\r\n");//改为\r\n
    bw.write("不知天上宫阙,今夕是何年。");
    bw.close();//用完了就将它关闭,如果你是懒人,可以只关闭最外层流i
    //重新打开它
    FileReader fr = new FileReader("c:/s1.txt");
    BufferedReader br = new BufferedReader(fr);
    FileWriter fw2 = new FileWriter("c:/s2.txt");
    BufferedWriter bw2 = new BufferedWriter(fw2);//写错了fw2
    while (br.ready()) {
        bw2.write(br.readLine());
        bw2.newLine();//添加换行符
    }
    bw2.close();//通常先关闭写,再关闭读
    br.close();
    }

------解决方案--------------------
Java code


import java.io.*;

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

        FileWriter fw = new FileWriter("c:/s1.txt");
        BufferedWriter bw = new BufferedWriter(fw);



        bw.write("明月几时有,把酒问青天。\r\n");

//尝试将这一句改为 bw.write("明月几时有,把酒问青天。\n");
//却没有实现换行,为什么?  windows加上\r就可以了

//         bw.newLine();
         bw.write("不知天上宫阙,今夕是何年。");

        System.out.println("Copying in progress......");
        bw.close();//先保证内容写到文件

        FileReader fr = new FileReader("c:/s1.txt");
        BufferedReader br = new BufferedReader(fr);

        FileWriter fw2 = new FileWriter("c:/s2.txt");
        BufferedWriter bw2 = new BufferedWriter(fw2); //这里更改,原来是fw
//        while(br.ready()){
//            bw2.write(br.readLine());
//        } 复制内容的API调用有问题 看下面的
        String str="";
        while((str=br.readLine())!=null){
            bw2.write(str);
        }

//通过上面的循环,本意是将s1.txt中的文字复制到s2.txt中的,结果,发现s2文件为空!!
//经过调试发现,原来br.readline()竟然为null!!为什么??
        System.out.println("Success!");
         bw2.close();
        br.close();
    }
}

------解决方案--------------------
bw.write("明月几时有,把酒问青天。\r\n");

再加上一个“\r”