IO流的学习

一.流的概念:java

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。它的特性是进行数据传输;数组

通俗理解:例如从水源地长江把水导入自来水厂,而后又从自来水厂把水送到各家各户。从长江到自来水厂之间的管道咱们能够称之为输入流,从自来水厂把水送到各家各户的管道咱们称之为输出流,咱们大概能够这么理解。工具

二.流的分类测试

根据数据类型分为:字符流和字节流,根据流的方向分为输入流和输出流。spa

三.字节流和字符流线程

字节流:InputStreamOutputStream是java中能够按照最小字节单位读取的流,即每次读写一个字节,字节流是直接链接到输入源的流。code

字符流:是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。对象

字节流以字节为单位,字符流以字符为单位,一次可读2个字节,字节流可用于处理全部类型数据,而字符流只能处理字符类型的数据。
只要是处理纯文本就优先考虑使用字符流,除此以外都使用字节流blog

四.输入流和输出流ip

输入流是指程序从数据源中读取数据。只进行读操做;
输出流是指将数据从程序中写到指定的文件中;

五.IO流结构图
image.png

字节输入流InputStream:

InputStream 是全部的输入字节流的父类,它是一个抽象类。
ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。
PipedInputStream 是从与其它线程共用的管道。
ObjectInputStream 和全部FilterInputStream 的子类都是装饰流。

字节输出流OutputStream:

OutputStream 是全部的输出字节流的父类,它是一个抽象类。
ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。
PipedOutputStream 是向与其它线程共用的管道中写入数据。
ObjectOutputStream 和全部FilterOutputStream 的子类都是装饰流。

字符输入流Reader:

Reader 是全部的输入字符流的父类,它是一个抽象类。
CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。
PipedReader 是从与其它线程共用的管道中读取数据。
BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader 对象。
FilterReader 是全部自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增长一个行号。
InputStreamReader 是一个链接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 能够说是一个达到此功能、经常使用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。咱们能够从这个类中获得必定的技巧。Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。

字符输出流Writer:

Writer 是全部的输出字符流的父类,它是一个抽象类。
CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。
PipedWriter 是向与其它线程共用的管道中写入数据。
BufferedWriter 是一个装饰器为Writer 提供缓冲功能。PrintWriter 和PrintStream 极其相似,功能和使用也很是类似。
OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类。

九.经常使用例子

使用FileInputStream类读取文件内容

1.  import java.io.FileInputStream;   
2.  import java.io.FileNotFoundException; 
3.  import java.io.IOException;  
4.  /**  
5.   * 数据输入流测试  
7.   *  
8.   */
    
9.  public class firstIO {
10.  //程序的主方法 
11.      public static void main(String [] args) throws IOException{
12.          int i=0;    
13.          FileInputStream in=null;    
14.          try {    
15.              in=new FileInputStream("C:Users15080Desktopaaaa.txt");//从文件外读数据   
16.          } catch (FileNotFoundException e) {    
17.              // TODO: handle exception   
18.              System.out.println("找不到文件位置");   
19.              System.exit(-1);   
20.          } 
21.          try {    
22.              int num=0;//用于字节个数的计数    
23.              while((i=in.read())!=-1){   
24.                  System.out.println((char)i);//将获得的ASCII码值转换成字符型    
25.                  num++;    
26.              }    
27.              in.close();    
28.              System.out.println("传输字节个数:"+num);   
29.          } catch (Exception e) {   
30.              // TODO: handle exception   
31.              System.out.println("读取文件错误");    
32.          }    

34.      }   

36.  }

使用FileOutputStream写入文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
 
/**
 * 输入输出流测试
 * 
 *
 */
public class outIO {
//程序主方法
    public static void main(String []args){
        int i=0;
        FileInputStream in=null;
        FileOutputStream out=null;
        try {
            //实例化FileInputStream,FileOutputStream对象
            in=new FileInputStream("C:\\Users\\15080\\Desktop\\aaaa.txt");
            out=new FileOutputStream("C:\\Users\\15080\\Desktop\\bbbb.txt");
            while((i=in.read())!=-1){
                out.write(i);
                System.out.println((char)i);
            }
            in.close();
            out.close();
            System.out.println("文件已复制");
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("文件复制错误");
            System.exit(-1);
        } 
        
        
    }
}

使用FileRead、FileWriter复制文件

import java.io.FileReader;
import java.io.FileWriter;
 
public class TestFieldWriter1 {
public static void main(String []args){
    FileReader fr=null;
    FileWriter fw=null;
    try {
        fr=new FileReader("C:\\Users\\15080\\Desktop\\eeee.txt");//要读取的文件
        fw=new FileWriter("C:\\Users\\15080\\Desktop\\ffff.txt");//要复制的目的文件
        int i=0;
        while((i=fr.read())!=-1){
            fw.write(i);
            System.out.println((char)i);//将获得的ASCII码值转换成字符型
        }
        fr.close();
        fw.close();
    } catch (Exception e) {
        // TODO: handle exception
    }
}
}
相关文章
相关标签/搜索