黑马程序员-----IO流(1)字符流

本文深入探讨了Java中IO流的基本概念、使用方法及应用实例,包括字符流的读写、缓冲区优化以及综合实例展示。

——- android培训java培训、期待与您交流! ———-

1、 IO流用来处理设备之间的数据传输,JAVA对数据的操作是通过流的方式。

2、 IO流常用基类
字节流的抽象基类:InputStream/OutputStream
字符流的抽象基类:Reader/Writer

3、字符流(写入)Writer

需求:在硬盘上创建一个文件并写入一些文字数据,并对文件进行续写。

package com.shan;
import java.io.FileWriter;
import java.io.IOException;

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

             //创建一个可以往文件中写入字符数据的字符输出流对象
             //既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)
             //如果文件不存在,则会自动创建
             //如果文件存在,则会被覆盖
             FileWriter fw = new FileWriter("demo.txt" );

             //调用Writer对象中的write(string)方法,写入数据
             //其实数据写入到临时存储缓冲区中
             fw.write( "abcde");

             //进行刷新,将数据直接写入到目的地中
             fw.flush();

             //关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
             fw.close();

             /*对文件进行续写           
             FileWriter fw1 = new FileWriter("demo.txt" ,true);
             fw1.write("\r\n xiexie");

             //关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
             fw1.close();
             */

             }


}

关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
fw.close();
 }
 }

4、 字符流(读取)Reader
文本文件读取方式有两种:
方式一:通过Read()方法进行读取
方式二:通过字符数组进行读取

需求:将E盘下的一个文本文件复制到D盘(分别用这两种方式来读取)

package com.shan;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 需求:将E盘下的一个文本文件复制到D盘(分别用这两种方式来读取)
 * @author ling
 *
 */
public class Demo9 {

    public static void main(String[] args) throws IOException{
        //copy1();
    }
    /*第一种方式:一个字符一个字符的读取
    public static void copy1() throws IOException
    {
        FileWriter fw=new FileWriter("ArrayList.txt");
        FileReader fr=new FileReader("E:\\ArrayList.java");
        int ch=0;
        while((ch=fr.read())!=-1)
        {
            fw.write(ch);
            fw.flush();
            //fw.close();
            //fr.close();
        }
    }
    */
    //第二种方式:通过字符数组进行读取
    public static void copy2() throws IOException
    {
        FileWriter fw=new FileWriter("E:\\1.txt");
        FileReader fr=new FileReader("1.java");
        char[] buf=new char[1024];
        int len=0;
        while((len=fr.read(buf))!=-1)
        {
            fw.write(buf, 0, len);
            fw.close();
            fr.close();
        }



    }

}

5、 字符流的缓冲区
BufferedWriter : 字符写入流缓冲区
BufferedReader : 字符读取流缓冲区

举例说明:字符写入流缓冲区

package com.shan;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 需求:将流对象写入缓冲区
 * @param args
 */
public class Demo10 {

    public static void main(String[] args) throws IOException {
        //创建一个字符写入流对象
        FileWriter fw=new FileWriter("buf.txt");
        //为了提高字符写入流效率,加入缓冲技术,将流对象作为参数传递给缓冲区的构造函数即可
        BufferedWriter  bufw=new BufferedWriter(fw);
        for(int x=1;x<5;x++)
        {
            bufw.write("abcde"+x);
            bufw.newLine();
            bufw.flush();
        }

        bufw.close();

    }

}

举例说明:字符读取流缓冲区

package com.shan;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 需求:通过缓冲区读取流文件
 * @param args
 */
public class Demo11 {
    public static void main(String[] args) throws IOException {
        FileReader fr=new FileReader("buf.txt");
        BufferedReader bufr=new BufferedReader(fr);
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            System.out.println(line);
        }
        bufr.close();

    }

}

6、 综合实例: 通过缓冲区复制一个.java文件

 package com.shan;
      import java.io.BufferedReader;
      import java.io.BufferedWriter;
     import java.io.FileReader;
      import java.io.FileWriter;
    import java.io.IOException;

/**
 * 需求:通过缓冲区复制一个.java文件
 * @param args
 */
public class Demo12 {
    public static void main(String[] args) {
        BufferedWriter  bufw=null;
        BufferedReader  bufr=null;
        try
        {
            bufr=new BufferedReader(new FileReader("D:\\arraylist2.java"));
            bufw=new BufferedWriter(new FileWriter("D:\\arraylist2_copy.txt"));
            String line=null;
            while((line=bufr.readLine())!=null)
            {
                bufw.write(line);
                bufw.newLine();
            }
        }
        catch(IOException e)
        {
            new RuntimeException("读写失败!");
    }
    finally
        {
            try
            {
                if(bufr!=null)
            {
                    bufr.close();
                }

            }
            catch(IOException e)
            {
                new RuntimeException("读取关闭失败!");
            }
            try
            {
                if(bufw!=null)
                {
                    bufw.close();
                }

            }
            catch(IOException e)
            {
                new RuntimeException("写入关闭失败!");
        }

        }

    }

    }

——- android培训java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值