day18IO概述& 字符流FileWriter FileReader

<1 IO流(概述)>

按照操作的数据分为两种:字节流、字符流。

<2 IO流(FileWriter)>

package day18;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 字符流和字节流:
 * 字节流两个基类:
 * InputStream OutputStream
 *
 * 字符流两个基类:
 * Reader Writer
 *
 * 先学习一下字符流的特点。
 *
 * 既然IO流是用于操作数据的,
 * 那么数据的最常见体现形式是:文件。
 *
 * 那么先以操作文件为主来演示。
 *
 * 需求:在硬盘上,创建一个文件并写入一些文字数据。
 *
 * 找到一个专门用于操作文件的Writer自雷对象。FileWriter。
 * 后缀名是父类名,前缀名是该流对象的功能。
 * Created by Administrator on 2017/1/29.
 */
public class Test1 {
    public static void main(String[] args) throws IOException {
        //创建一个FileWriter对象。该对象一被初始化,就必须要明确被操作的文件。
        //而且该文件会被创建到指定的目录下。如果该目录下已有同名文件,将被覆盖。
        //其实该步就是在明确数据要存放的目的地。
        FileWriter fw = new FileWriter("demo.txt");

        //调用write方法,将字符串写入到流中。
        fw.write("abcde");

        //刷新流对象中的缓冲中的数据。
        //将数据刷到目的地中.
//        fw.flush();
//
//        fw.write("abc");
//        fw.flush();

        //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
        //将数据刷到目的地中。
        //和flush的区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
        fw.close();

//        fw.write("haha");
    }
}


<3 IO流(IO异常处理方式)>

package day18;

import java.io.FileWriter;
import java.io.IOException;

/**
 * IO异常的处理方式。
 * Created by Administrator on 2017/1/29.
 */
public class FileWriterDemo2 {
    public static void main(String[] args){
        //在外边建立引用,在内部进行初始化
        FileWriter fw = null; //调用底层资源
        try {
            fw = new FileWriter("demo.txt");
            fw.write("abcdefg"); //数据写入到“流”里面了
        } catch (IOException e) {
            System.out.println("catch:" + e.toString());
        }finally {
            try {
                if(fw != null) //一定要进行判断!
                fw.close();
            } catch (IOException e) {
                System.out.println(e.toString());
            }
        }


    }
}
<04 IO流(文件的读写)>

package day18;

import java.io.FileWriter;
import java.io.IOException;

/**
 * 演示对已有文件的数据续写。
 * Created by Administrator on 2017/1/29.
 */
public class FileWriterDemo3 {
    public static void main(String[] args) throws IOException {
        //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
        FileWriter fw = new FileWriter("a.txt", true);

        fw.write("nihao\nxiexie");
        fw.close();
    }
}
<05 IO流(文本文件读取方式一)>

package day18;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * Created by Administrator on 2017/1/29.
 */
public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        //创建一个文件读取流对象,和指定名称的文件相关联。
        //要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException。
        FileReader fr = new FileReader("demo.txt");

        //调用读取流对象的read方法
        //read():一次读一个字符。而且会自动往下读。

        int ch = 0;
        while ((ch = fr.read()) != -1){
            System.out.println((char)ch);
        }

     /*   while (true){
            int ch = fr.read();
            if(ch == -1)
                break;
            System.out.println("ch=" + (char)ch);
        }*/
//        int ch = fr.read();
//        System.out.println("ch=" + (char)ch);

        fr.close(); //调用的是Windows的read方法。
    }
}
<06 IO流(文本文件读取方式二)>

package day18;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 第二种方式:通过字符数组进行读取。
 * Created by Administrator on 2017/1/30.
 */
public class FileReaderDemo2 {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");

        //定义一个字符数组,用于存储读到的字符。
        //该read(char[])返回的是读到的字符个数.
        char[] buf = new char[1024];

        int num = 0;
        while((num=fr.read(buf)) != -1){
            System.out.println(new String(buf, 0, num));
        }

        fr.close();

    }
}
<07 IO流(文本文件读取练习)>

package day18;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 读取一个.java文件,并打印在控制台上。
 * Created by Administrator on 2017/1/30.
 */
public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("demo.txt");
        char[] buf = new char[1024];

        int num = 0;
        while((num = fr.read(buf)) != -1){
            System.out.println(new String(buf, 0, num));
        }
        fr.close();
    }
}
<08 IO流(拷贝文本文件)>

package day18;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 将c盘一个文本文件复制到D盘
 * 复制的原理:
 * 其实就是将C盘下的文件数据存储到D盘的一个文件中。
 *
 * 步骤:
 * 1. 在D盘创建一个文件。用于存储C盘文件中的数据。
 * 2. 定义读取流和C盘文件关联。
 * 3. 通过不断的读写完成数据的存储。
 * 4. 关闭资源。
 * Created by Administrator on 2017/1/30.
 */
public class CopyTest {
    public static void main(String[] args) throws IOException {
//        copy_1();
        copy_2();
    }
    //从C盘读一个字符,就往D盘写一个字符
    public static void copy_1() throws IOException {
        //创建目的地。
        FileWriter fw = new FileWriter("Demo_copy.txt");

        //与已有文件关联。
        FileReader fr = new FileReader("demo.txt");

        int ch = 0;
        while((ch = fr.read()) != -1){
            fw.write(ch);
        }

        fw.close();
        fr.close();
    }

    public static void copy_2(){
        FileWriter fw = null; //局部变量都要初始化一些
        FileReader fr = null;
        try{
            fw = new FileWriter("copy.txt");
            fr = new FileReader("demo.txt");

            char[] buf = new char[1024];
            int len = 0;
            while((len = fr.read(buf)) != -1){
                fw.write(buf, 0, len);
            }
        }catch (IOException e) {
            throw new RuntimeException("读写失败");
        }finally {
            if(fr != null){
                try{
                    fr.close();
                }catch(IOException e){

                }
            }
            if(fw != null)
                try{
                    fw.close();
                }catch(IOException e){

                }
        }
    }

}

<09 IO流(拷贝文本文件图例)>









猜你喜欢

转载自blog.csdn.net/lotusws/article/details/54767196
今日推荐