IO流

1.描述:

  • 输入流(input):读数据
  • 输出流(output):写数据
  • 字节与字符:
    • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
    • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。

2.字节流:

  • 概念:

    ——InputStream:字符输入流的所有类的超类
    ——OutputStream:字符输出流的所有类的超类
    ——写数据    
    ——字节流写数据实现追加写入:
    ——————public FileOutputStream(String name,boolean append);创建文件时;第二个参数为true,则字节写入文件的末尾而不是开头
    ——换行
    ——————window:\r\n---------linux:\n------------mac:\r
    ——读数据
    ——————文件没有数据读出为-1   读数据自动换行
    
  • 使用:

    • 写数据(抛出异常):

      FileOutputStream bb=new FileOutputStream(new File("D:\\编程\\IDEA文件\\sda.txt"));
      
      bs.write(97);
      
      byte[] b={97,65,66,67,78,66,66};
      bb.write(b,2,3);        //字符组从下标1开始,长度为3
      
      for(int i=0;i<5;i++){
           fos.write("hellow".getBytes());
           fos.write("\r\n".getBytes());       //换行符的字节形式
      }
      bb.close();
      
    • 写数据(try-catch):

      FileOutputStream fos=null;
      	try{
      		fos=new FileOutputStream("D:/编程/IDEA文件/hh.txt");
               fos.write("hello".getBytes());
          }catch(IOException er){
               er.printStackTrace();
          }finally{
               try{
      			fos.close();
          	 }catch (IOException e){
                   e.printStackTrace();
                }
          }
      
    • 读数据:

      //文件没有数据读出为-1
      //读数据自动换行
      FileInputStream fr=new FileInputStream("D:/编程/IDEA文件/hh.txt");
      //读取文本
      int by;
      while((by=fr.read())!=-1){
      	System.out.print((char)by);
      }
      //读取字节数组
      byte[] bys=new byte[1024];
      int len;
      while((len=fr.read(bys))!=-1){  //
      	System.out.println(new String(bys,0,len));      //字节数组转字符串
      }
      fr.close();
      
    • 复制文本:

      FileInputStream fr=new FileInputStream("D:/编程/IDEA文件/hh.txt");
      FileOutputStream fs=new FileOutputStream("D:/编程/IDEA文件/uh.txt");
      int by;
      while((by=fr.read())!=-1){  
      	System.out.print((char)by);
      	fs.write(by);     //写文件也自动换行
      }
      
      fr.close();
      fs.close();
      

3.字节缓冲流:

  • 概念:

    • 输入流BufferedInputStream
    • 输出流BufferedOutputStream
    • 通过一个字节缓冲区一次性把数据写到文件中
  • 使用:

    • 写数据:

      BufferedOutputStream fs=new BufferedOutputStream(new FileOutputStream("D:/编程/IDEA文件/hh.txt"));
       fs.write("hello\r\n".getBytes());
      fs.close();
      
    • 读数据:

      BufferedInputStream fs=new BufferedInputStream(new FileInputStream("D:/编程/IDEA文件/hh.txt"));
      //字节读
      int by;
      while ((by=fs.read())!=-1){
          System.out.print((char)by);
      }
      //字节数组读
      byte[] bys=new byte[1024];
      int len;
      while((len=fs.read(bys))!=-1){      //fs.read(bys)返回的是bys中的字符个数
      	System.out.println(new String(bys,0,len));
      }
      fs.close();
      

4.字符流:

  • 概念:

    • 字符流=字节流+编码表
    • Reader:字符输入的抽象类
    • Writer:字符输出的抽象类
  • 使用:

    • 读数据+写数据:

      FileReader fi=new FileReader("D:\\编程\\IDEA文件\\hh.txt");
      FileWriter fs=new FileWriter("D:\\编程\\IDEA文件\\hs.txt");
      //普通读取
      int gg;
      while((gg=fi.read())!=-1){
            fs.write(gg);
      }
      //读取字符数组
      char[] ch=new char[1024];
      int gg;
      while((gg=fi.read(ch))!=-1){
      	fs.write(ch);
      }
      fi.close();
      fs.close();
      

5.字符缓冲流:

  • 概念:

    • BufferedWriter字符缓冲输出流
    • BufferedReader字符缓冲输入流
  • 方法:

    • String readLine();读一行文字,没有返回null
    • void newLine();换行
    • flush();刷新流:从缓冲区内刷出数据
  • 使用:

    • 读数据:

      BufferedReader fr=new BufferedReader(new FileReader("D:\\编程\\IDEA文件\\hh.txt"));
      String ss;
      while((ss= fr.readLine())!=null){
      	System.out.println(ss);
      }
      fr.close();
      
    • 写数据:

      BufferedWriter fs=new BufferedWriter(new FileWriter("D:\\编程\\IDEA文件\\hh.txt"));
      fs.write("sdads");
      fs.newLine();
      fs.close();
      

6.特殊操作流:

[[TOC]] 这里写自定义目录标题

全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务