IO输入输出流,输入流和输出流的基本用法

一、IO流简介:

流的定义:流是指一连串流动的字符,是以先进先出方式发送信息的通道。

按流向分:输出流:OutputStream和Writer为基类

                输入流:InputStream和Reader为基类

按处理数据单元划分:字节流:字节输入流:InputStream基类

                                                字节输出流:OutputStream基类

                                  字符流:字符输入流:Reader基类

                                   字节输出流:Writer基类

(字节流是 8 位通用字节流,字符流是16位Unicode字符流)

1.1 InputStream

引入相关的类:InputStream ins =null;

构建输入流,例如FileInputStream:

ins =new FileInputStream(new File(path));

操控字节输入流的,所用的方法也是针对字节的。

常用方法:

返回值类型  

方法名

方法简介

abstract int read( ) 从此输入流中读取下一个字节(此方法是抽象方法,子类必须实现该方法。
int read(byte [ ] b ) 从输入流中读取一定数量的字节,存储在参数指定的字节数组中。
int read(byte [ ] b ,int off ,int len ) 读到 len字节从输入流读入字节数组数据。
long skip( long n ) 跳过并丢弃 n字节从输入流中的数据。
int available( ) 返回此输入流下一个方法可以读取的字节数。
package ChangYL.FileTest.InPutTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class InPutTest02 {

    public static void main(String[] args) throws Exception {

        // 缓冲区

        File f1 = new File("d:/d.txt");
        InputStream in = new FileInputStream(f1);

//        byte[] b=new byte[10];
//        //一次最多读取数组长度个字节,读取的内容转换成对应数字存入byte 数组中,
//        // 返回的是实际读取的字节数
//        int n = in.read(b);
//        System. out . println("读取的字节数: "+n);
//        String s=new String(b,0,n);
//        System. out. println(s);
//        byte[] b1=new byte[10];
//        //只剩5 个字节,实际读取了5个字节 数组后五个是默认值(无效数据)
//        int n1 = in.read(b1);
//        System. out . println("读取的字节数: "+n1);
//        // 对数组中从0索引开始截取读取到的有效字符数个内容 组成字符串
//        String s1=new String(b1,0,n1);
//        System. out . println(s1);

        // 推荐写法
        byte[] b2=new byte[10];
        int n;
        while ( (n=in.read(b2)) !=-1 ){
            String z = new String(b2 ,0,n);
            System.out.print(z);
        }

    }
}

1.2 OutputStream

常用方法:

返回值类型

方法名

方法简介

void flush( ) 刷新输出流,是缓存数据被写出来
void write(byte [ ] b) 写b.length 字节从指定的字节数组的输出流
void write(byte [ ] b, int off, int len) 写len字节从字节数组数据中到输入流
abstract int write( int b ) 将指定的字节写入该输出流中

1.2.1  FileOutputStream

是OutputSTream的子类,主要功能是从源文件写入资料至指定文件中

构造方法

1、FileOutputStream( File file )// 创建“File对象”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。若要追加则为(File file, true);

2、FileOutputStream( String path ) // 创建“文件(路径为path)”对应的“文件输入流”; (若没有,自动系统调用方法创建),默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。  若要追加则为(String path, true); 

综合案例完成文件的复制

package ChangYL.FileTest.InPutTest;

import java.io.*;

public class CopyFileTest03 {
    public static void main(String[] args) throws IOException {

        // 1.定义源文件和目标文件的File对象
        File f1 = new File("D:/a.jpg");
        File newFile = new File("D:/aa/newFile.jpg");

        // 2.定义输入输出流关联文件
        InputStream in = new FileInputStream(f1);
        OutputStream out = new FileOutputStream(newFile);

        // 3.使用输入流读取内容,然后把读取的内容写入目标文件

//        // 3.(方法1)逐个进行读写操作
//            int n;
//            while ( (n = in.read() ) !=-1 ){
//                out.write(n);
//            }
//
//        // 3.(方法2)使用缓冲区读写
//            byte[] buffer = new byte[10];
//            while ( (n = in.read(buffer)) !=-1  ){
//                out.write(buffer,0,n);
//            }

        // 3.(方法3)
            long start = System.currentTimeMillis();
            // 推荐写法
            byte[] buffer = new byte[1024];
            int n ;
            while ( (n = in.read(buffer)) !=-1  ){
                out.write(buffer,0,n);
            }
            long stop = System.currentTimeMillis();

            System.out.println("耗时:"+(stop-start));


    }
}

猜你喜欢

转载自blog.csdn.net/m0_70051776/article/details/128272808