读写流对象 基本演示(一)

来源:互联网 发布:蓝牙小车控制app源码 编辑:程序博客网 时间:2024/06/07 20:44


字节流和字符流:
 *  字节流的两个基类  :InputSream  OutputSream
 *  字符流的两个基类:Reader      Writer
 *  先学习下字符流的特点 :
 *  既然IO流适用于操作数据的,那么数据的最常见的体现形式是:文件

(1) 读取流 演示:

import java.io.*;

class FileReaderDemo {

    
    public static void main(String[] args) throws IOException
    {
        //创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件
        // 是已经存在的,如果不存在,会发生FileNotFoundException  .
        FileReader  fr = newFileReader("d:\\IOstream\\demo.txt");
        
//第一种 方式:
        //调用读取流对象的read 方法。
        /*int  ch1 = fr.read();
        System.out.println("ch1="+(char)ch1);
        //read()返回的是读取到得字符对应的int 型数据。因此需要强转。
                     
        //read():一次会读取一个字符,而且会自动向下读。
        int  ch2 = fr.read();
        System.out.println("ch2="+(char)ch2);
        */
        
        //  循环方法2
//        while(true)
//        {
//            int  ch=fr.read();
//            if (ch==-1)
//               break;
//           System.out.println("ch="+(char)ch);
//        }
        /*  循环方法3
        int  ch = 0;
        while((ch=fr.read())!=-1)
        {
           System.out.println((char)ch);
        }*/
        //fr.close();
        
// 第二种方式:通过字符数组进行读取。
//定义一个字符数组,用于存储读到的字符,该read(char[])返回的是读取的字符的个数。
       
        char  []  buf = new char[3];
        int num =fr.read(buf);//把流关联的数据,读一个存到数组中。
       System.out.println("num="+num+"...."+new String(buf));
               //看看num 是多少和将buf变成字符串打印
        
        int num1 =fr.read(buf);
       System.out.println("num1="+num1+"...."+new String(buf));
        
        int num2 =fr.read(buf);
       System.out.println("num2="+num2+"...."+new String(buf));
        
        /*
        char  []  buf3= new char[10];//一个字符占两个字节。 10个字符在内存占用20个字节空间。
        int  num3= 0,count=0;
        while((num3=fr.read(buf3))!=-1)
        */
/*此句意思是把流关联的数据读一个存到数组中去。
 由于数组本身指针自增操作,流会自动读下一个数据存到数组中。
//当数组长度较小时,读入其中的字符超出数组大小,该流的读硬盘文件操作停止,看看流返回的是不是-1;
     不是-1,执行 while循环内部语句。之后有判断条件,调用并执行num=fr.read(buf),该流从停止的位置继续读硬盘。
      重新向数组的开始位置依次读入数据。
//当数组长度较大时,流读完了全部的硬盘数据还没有超出数组大小,则该流停止读,返回
       已读取的字符数,不是-1,执行 while循环内部语句。之后判断条件,执行num=fr.read(buf),由于
       已经到了硬盘数据末尾,num=-1;不再执行 while循环内部语句。            
 */

        /*
        {
           System.out.println("count= "+count++);// 看看究竟循环了多少次?
            System.out.println(newString (buf3,0,num3));
            //new String 是将数组变成字符串,方便打印。
        
                   
        }

    */

class FileWriterDemo {

    
    public static void main(String[] args) throws IOException
    {
    //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
    //而且如果没有这文件, 该文件会被创建到指定目录下;如果该目录有同名文件会被覆盖。
    //其实该步就是在明确数据要存放的目的地。
        FileWriter  fw  = newFileWriter("D:\\IOstream\\demo.txt");
        
        //调用write 方法,将字符串写入到流中。
        fw.write("abcde");
        //刷新流对象中的缓冲的数据。将数据刷到目的地中。
        fw.flush();
        //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。
    // 和flush的区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
    
        fw.close();// close其实也是为了 释放 Windows 系统的资源
        //fw.write("+++哈哈哈++");
        
    }

}

(2) 写出流 演示

class FileWriterDemo {

    
    public static void main(String[] args) throws IOException
    {
    //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
    //而且如果没有这文件, 该文件会被创建到指定目录下;如果该目录有同名文件会被覆盖。
    //其实该步就是在明确数据要存放的目的地。
        FileWriter  fw  = newFileWriter("D:\\IOstream\\demo.txt");
        
        //调用write 方法,将字符串写入到流中。
        fw.write("abcde");
        //刷新流对象中的缓冲的数据。将数据刷到目的地中。
        fw.flush();
        //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。
    // 和flush的区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
    
        fw.close();// close其实也是为了 释放 Windows 系统的资源
        //fw.write("+++哈哈哈++");
        
    }

}



原创粉丝点击