黑马程序员-JavaI/O流

 


---------------------- <ahref="http://www.itheima.com"target="blank">ASP.Net+Unity
开发</a>、<ahref="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

I/O流:分为字符流和字节流

       字节流:

                     |--InputSystem

                     |--OutputSystem

       字符流:

                     |--Reader

                     |--writer

              先以操作文件为主要演示:

              需求:在硬盘上,创建一个文件写入一些数据

              找到一个专门操作文件的Writer子类对象。FileWriter  。后缀名是父类名  前面是功能名

 

              //创建一个filewriter对象,该对象一被初始化就必须要明确被操作的文件。

              //而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖

              //其实该步就是在明确数据要存放的位置

              FileWriterfw =  new FileWriter("demo.txt");

              //调用writer的方法将字符串写入流中。

              fw.write("abcd");

              //刷新流对象中的缓冲数据 将数据存入目的地中

              fw.flush();

 

               //关闭流资源,但是在关闭之前会刷新一次内部的缓冲的数据。将数据刷新到目的地中。

               //和flush 的区别:flush刷新后 流可以继续使用。 close刷新后 流关闭。

               fw.close();

 

I/O异常处理方式:

                     FileWriterfw =null

                     try{

                            fw = newFileWriter("demo.txt");

                            fw.write("abddasdas");

                            fw.flush();

 

                     }  catch (IOException e )

                     {

                            //异常处理

                     }

                     finally

                     {

                            try{

                                   if(fw!=null)

                                      fw.close();

 

                            }catch(IOException e)

                            {

                                   //异常处理

 

                            }

                     }

    对已有文件的数据的续写:  FileWriter fw= newFileWriter("demo.txt",true);    

 

   \r 和\n 为换行

 Reader:

  //创建一个文件读取流对象,和指定名称的文件想关联。

  //要保证该文件已经存在的,要不存在,会发生异常FliesNotFoundException

FileReader fr= newFileReader("demo.txt");

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

 //第一种方式读取

  intch=0;

 while((ch=fr.read())!=-1)

  {

 System.out.println((char)ch);

  }

//第二种方式:通过字符数组进行读取。

       FileReaderfr = 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();

//缓冲区的出现是为了提高流的操作效率而出现的所以在创建缓冲区的之前必须先有流对象

 

              //创建一个字符写入流对象:FileWriter fw =newFileWriter("buf.txt");

              //为了提高字符写入流效率 加入了缓冲技术

              //只有将需要被提高的流对象作为参数传递给缓冲区的构造函数即可

              BufferedWriterbufw = new BufferedWriter(fw);

 

              for(int x=1;x<5;x++)

              {

                            bufw.writer("abcd"+x);

                            bufw.newLine();//换行

                            bufw.flush();//写完就存入硬盘,防止断电,buff里面内容丢失

              }

 

              //记住,只有用到缓冲区就要记得刷新

              //bufw.flush();

              bufw.flush();

              //其实关闭缓冲区,就是在关闭缓冲区中的流对象。

              bufw.close();

 

 

 

              /*字符读取流缓冲区: 该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取,当返回null时,表示读到文件末尾。

              readLine()返回的是换行之前的数据。所以需要自己手动换行。

              */

              //创建一个读取流对象,和文件相关联           

              FileReaderfr = newFileReader("buf.txt");

              //为了提高字符读取效率,加入了缓冲技术,将字符读取流对象作为参数传递给缓冲区构造函数

              BufferedReaderbufr = new BufferedReader(fr);

              Stringline = null;

              while((line=bufr.readLine())!=null)

              {

                            System.out.println(line);

              }

              bufr.close();

 

 

 

                     readLine方法的原理:无论是读一行 获取多个字符,其实最终都是在硬盘上一个一个读取,所以最终使用的还是readLine方法一次读一个的方法。

字节流:InputStream    OutputSystem

   

   //存

   FileOutputSystem fos = new FileOutputSystem("fos.txt");

    fos.write("abcde".getBytes());

    //不需要刷新就可以存入文件

    //必须关资源

    fos.close();

    //读

    FileInputSystem fis= new FileInputSystem("fis.txt");

        

        byte[] buf = new byte[fis.available()] //定义一个刚刚好的缓冲区,不用在循环了... 用于缓冲区较小的方法

        fis.read(buf);

        fis.close();

        /*

         循环使用缓冲区

         byte[] buf = new byte[1024];

         int len= 0;

         while((len=fis.read(buf))!=1)

         {

             system.out.printl(buf,0,len); 

         }

 

 

        */

        

           转换流:InputSystemRead; 字节转换成字符

                         OutputSystemWrite;字节转换成字符;

 

                         键盘录入:BufferedReader bufr = newBufferedReader(new InputStreamRead(System.in))

                  打印输出:bufferedWriter bufw = newBufferedWriter(new OutStreamWrite(System.out));

 

  从键盘录入的数据存储到文件中:

      源:键盘;    目的:文件;

         //输出

              bufferedWriterbufw = new BufferedWriter(new OutStreamWrite(new FileOutputStream(out.txt)));

 

 

              流操作的基本规律:

                            最痛苦的是流对象很多 ,不知道该用哪一个

                                   通过两个,明确来确定;

                                   1.明确源和目的:

                                          源:输入流:InputStream  Reader

                                          目的:输出流 OUtputSystem  Writer

                                   2.操作的数据是不是纯文本。

                                          是:字符流

                                          否:字节流

                                   3.当体系明确后,在明确要使用哪个具体的对象:通过设备来进行区分:

                                          源设备:内存,硬盘。键盘;

                                          目的设备:内存,硬盘控制台

 

 

                                   1.将一个文本文件中的数据存储到另一个文件中:复制文件

                                          源: 因为是源所以选择读取流InputStream reader,是不是操作文本文件? 是就可以选择reader 这样体系就可以明确了

                                          接下来明确要使用该体系中的哪个对象

                                                 明确设备:硬盘。上一个文件。Reader体系中可以操作文件的对象是FileReader

                                                 是否需要提高效率? 是!  加入Reader体系中缓冲区BufferedReader

                                          目的:OutputSystem Writer 是否纯文本?

                                             是  Writer

                                             设备:硬盘;一个文件

                                             Writer体系中可以操作文件的对象WriterWriter

                                             是否需要提高效率?是! 加入Writer体系中缓冲区BufferedWriter

 

 

---------------------- <ahref="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<ahref="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://www.itheima.com"target="blank">www.itheima.com</a>

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值