【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());
      }
     }
    }
原文地址:https://www.cnblogs.com/yczha/p/13160275.html