• 【Java】Java中的IO流


    摘要:本文主要讲解了Java中 IO流的使用,包括流的概念、流的分类及使用实例等

    一、流的概念
    • 流是用于连接程序和设备之间的”管道“,主要用于数据传输,这个“管道”上有很多的“按钮”,每个“按钮“皆可实现不同的功能。
    二、流的分类
    • 四个基本抽象流(输入输出流,字节字符流)

    • 文件流、缓冲流、转换流、数据流、Print流Object流

    • 字符流

      FileReader file=new FileReader("F:/java/Part2/src/cha07/L7_1.java");//字符流
      int aa;//java规定了read()函数的返回值为整形
      aa=file1.read();//读取一个字符
      while(aa!=-1)//ASCII码是从0开始的数字,读取时没有则返回-1。
      {
      System.out.print((char)aa);
      aa=file1.read();
      }
      file1.close();
    • 字节流与字符流

      • 字节流有着广泛的使用范围,对大部分文件皆可读取传输,而字符流仅用作读取文本文件

      • 演示音频文件的复制粘贴比较字节流与字符流用法

      FileReader file=new FileReader("C:/Users/zha yongchun/Desktop/java笔记/material/shenhua.mp3");//字符流
      FileInputStream file1=new FileInputStream("C:/Users/zha yongchun/Desktop/java笔记/material/shenhua.mp3");//字节流
      FileWriter paste=new FileWriter("E:/p1.mp3");
      FileOutputStream paste1=new FileOutputStream("E:/p2.mp3");
      int aa;//java规定了read()函数的返回值为整形
      int bb;
      aa=file.read();//读取一个字符
      bb=file1.read();
      System.out.println("Contents:");
      while(aa!=-1)//ASCII码是从0开始的数字,读取时没有则返回-1。
      {
         paste.write(aa);
         paste1.write(bb);
      
         aa=file.read();
         bb=file1.read();
      }
        paste.flush();//将流中残留内容全部输入或输出
        paste1.flush();
      
        file.close();
        file1.close();
        paste.close();
        paste1.close();
    • 虚拟内存与缓冲流

      //缓冲流
      BufferedInputStream hcfz=new BufferedInputStream(new FileInputStream("C:/Users/zha yongchun/Desktop/java笔记/material/shenhua.mp3"));
      BufferedOutputStream hczt=new BufferedOutputStream(new FileOutputStream("E:/hc.mp3"));
      byte hc[]=new byte[2048];//数字为缓冲区大小,单位为:字节
      //注:其余的使用同字节字符流
      //缓冲流的优势在于有着更快的速度
      //缓冲字符流用于拷贝较大文本文件,用法类似缓冲字节流 
    • 数据流传输:主要用于网络数据的传输

      //数据流传输
      ByteArrayOutputStream zjszl=new ByteArrayOutputStream();
      DataOutputStream sjl=new DataOutputStream(zjszl);
      long dd=123457890;
      sjl.writeLong(dd);
      byte[] zjsz=zjszl.toByteArray();
      ByteArrayInputStream srl=new ByteArrayInputStream(zjsz);
      DataInputStream sjsr=new DataInputStream(srl);
      long ss;
      ss=sjsr.readLong();
      System.out.println("ss="+ss)
    • 转换流

      String zfc=null;
      try
      {
      BufferedReader zhl=new BufferedReader(new InputStreamReader(System.in));
      zfc=zhl.readLine();//若输入回车键,则输入的实质上是一个空字符串
      System.out.println("字符串是: "+zfc);
      System.out.println(zfc.equals(""));
      }
      catch(Exception e){}
      //System.in是字节流,想要转换为字符流需要使用上面的方法。
    • print

      //print流
      //注:DataOutputStream中的sjscl.writeLong()方法的结果是计算机识别的二进制文件
      // PrintStream中的pl.println()方法的结果是字符串
      
      DataOutputStream sjscl=new DataOutputStream(new FileOutputStream("E:/1.txt"));
      sjscl.writeLong(12345466);
      sjscl.close();
      PrintStream pl=new PrintStream(new FileOutputStream("E:/2.txt"));
      pl.println(12345);
      pl.close();
      
      System.out.println(12345);
      System.out.printf("%#X
      ",12345);
      
      //print流输出位置的设置
      PrintStream p=new PrintStream("E:/3.txt");
      System.setOut(p);
      System.out.println("1234");
      
      //错误输出
      PrintStream plzq=null;
      PrintStream plcw=null;
      Scanner sss=null;
      
      try //try要从创建流开始直到最后
      {
       plzq=new PrintStream("e:/plzq.txt");
       plcw=new PrintStream("e:/plcw.txt");
       sss=new Scanner(System.in);
      
       int shuzi;
       System.setOut(plzq);//设定输出位置
       System.setErr(plcw);//设定错误输出位置
       while(true)
       {
          shuzi=sss.nextInt();
          System.out.println(shuzi);
       }
      }
      catch(Exception e)
      {
       System.err.println("输入有误!");
      }
      
    • Object

      //Object:实现文件的安全传输
      ObjectOutputStream osc=null;
      ObjectInputStream osr=null;
      
      Student stu1=new Student("wukong",12345,99);
      Student stu2=null;
      try
      {
       FileOutputStream wsc=new FileOutputStream("e:/5.txt");
       osc=new ObjectOutputStream(wsc);
       osc.writeObject(stu1);
      
       osr=new ObjectInputStream(new FileInputStream("e:/5.txt"));
       stu2=(Student)osr.readObject();
       System.out.println(stu2.xingming+" "+stu2.xuehao+" "+stu2.chengji);
      }
      catch(Exception e)
      {
       System.err.println("有错误");
      }
      finally //其作用是善后
      {
       try
       {
        osc.close();
        osr.close();
        System.exit(-1);//退出程序
       }
       catch(Exception e)
       {
        System.exit(-1);
       }
      }
      //finally下面的try、catch都需写上起到退出作用的语句
      }
      }
      class Student implements Serializable//接口是空的,起到标志作用
      {
      String xingming=null;
      int xuehao=0;
      transient double chengji=0;//transient的作用是忽略,外界无法传进来数据
      public Student(String xingming,int xuehao, double chengji)
      {
      this.xingming=xingming;
      this.xuehao=xuehao;
      this.chengji=chengji;
      }
      }
    • IO流补充

      //IO流补充
      File wj=new File("E:/wjj/5.txt");
      File wjj=new File("e:/wjj");
      if(!wjj.isDirectory())
      {
      try
      {
      wjj.mkdir();
      {
       if(wjj.isDirectory())
       {
        File xianshi[]=wjj.listFiles();//显示文件
        for(int i=0;i
        {
         System.out.println("文件名: "+xianshi[i].getName());
        }
        }
        else
            wjj.mkdir();//创建文件夹
        }
        {
         if(!wj.exists())
         {
          try
          {
           wj.createNewFile();//创建文件
           System.out.println("文件路径: "+wj.getAbsolutePath());
           System.out.println("文件大小: "+wj.length());
           System.out.println("文件是否可读: "+wj.canRead());
           System.out.println("文件是否可写: "+wj.canWrite());
          }
          catch(Exception e){}
         }
      
         else if(wj.exists())
         {
          System.out.println("文件路径: "+wj.getAbsolutePath());
          System.out.println("文件大小: "+wj.length());
          System.out.println("文件是否可读: "+wj.canRead());
          System.out.println("文件是否可写: "+wj.canWrite());
         }
        }
       }
       catch(Exception e){}
      }
      
      else if(wjj.exists())
      {
       {
         File xianshi[]=wjj.listFiles();//显示文件
         for(int i=0;i
         {
          System.out.println("文件名: "+xianshi[i].getName());
         }
       }
      
       {
        if(!wj.exists())
        {
         try
         {
          wj.createNewFile();//创建文件
         }
         catch(Exception e){}
        }
      
        else if(wj.exists())
        {
         System.out.println("文件路径: "+wj.getAbsolutePath());
         System.out.println("文件大小: "+wj.length());
         System.out.println("文件是否可读: "+wj.canRead());
         System.out.println("文件是否可写: "+wj.canWrite());
        }
       }
      }
  • 相关阅读:
    linux poll 和 select
    linux测试 scullpipe 驱动
    linux进程唤醒的细节
    linux进程互斥等待
    linux 手动睡眠
    linux一个进程如何睡眠
    [POJ 2431]Expedition
    【MongoDB数据库】MongoDB 命令入门初探
    高速排序为什么快?
    [050] 微信公众平台开发入门视频教程已公布
  • 原文地址:https://www.cnblogs.com/yczha/p/13160275.html
Copyright © 2020-2023  润新知