IO输入输出流简析

IO输入输出流简析

1.Java中主要通过File类实现与硬盘上文件的联系。
注:
1.1 File仅代表一个联系,可能文件存在,也可能不存在;
1.2 这里的文件可以是文件,也可以是文件夹。

2.IO流的种类
2.1按照处理 数据单位 分为:字节流(8位)(byte)和字符流(16位)(char)。

字节流:能够处理音视频等其他一切文件,InputStream 和 OutputStream

字符流:仅能处理文本,Reader 和 Writer
2.2按照 流向 分类
输入流:数据源到程序(InputStream、Reader) 读取文件
输出流:程序到目的地(OutPutStream、Writer) 写入文件
2.3功能 分类
节点流:可以直接从数据源或目的地读写数据。
处理流::不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。

3.操作步骤
3.1 明确目的(读取文件还是写文件)
3.2 找准源头(读取)
3.3 找准目的(写出)
在程序中主要分为以下几步:
1.建立练习:抽象文件对象
2.选择流:创建输入输出流等对象
3.执行操作:对需要执行的操作进行执行
4.释放资源:需要手动关闭

4.基本输入流
Reader

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

/*
读取一个文件中的字符
1、确定目标
2、选择流
3、读取
4、释放资源
 */
public class Demo002 {
    public static void main(String[] args) throws Exception {
        //确定目标,
        // 本次文件建立在相对路径下的,测试的时候使用者可自行修改路径
        File file=new File("a.txt");
        //检验文件是否存在
        System.out.println(file.exists());
        //获取当前目录|文件的绝对路径
        System.out.println(file.getAbsolutePath());
        //选择流
        Reader r=new FileReader(file);
        //循环读取
        //临时变量存储每一次读取到的数据
        //由于此处read()方法每次执行都会读取下一个字符,需要存储变量实现全部遍历
        //否则没执行一次便向下一个字符移动一次
        int i;
        int num=0;
        //当读取到的内容不为-1,继续读
        while ((i=r.read())!=-1){
            System.out.print(num++ +" ");
            System.out.print((char)i);
            System.out.println();
        }
        /*while(r.read()!=-1){
            System.out.print(num++ +" ");
            System.out.print((char)r.read());
            System.out.println();
        }*/
        //释放资源
        r.close();
    }
}

方式二:
FileInputStream
此处异常通过try- catch 捕获,也可向上面的代码一样进行简化

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
/*
字节流
 */
public class Demo004 {
    public static void main(String[] args) {
        //确定源头
        File file=new File("a.txt");
        //选择流
        InputStream in=null;
        //准备临时存储数据的空间
        byte[] car=new byte[9];

        try{
            in=new FileInputStream(file);
            //读取
            // 将读取的字节内容 存入 byte[] car, 返回实际读取到的字节数
            int len=in.read(car);
            System.out.println(len +"实际读取到的字节数");
            // 利用读取到的实际字节数  , 拼成一个字符串
            String s=new String(car,0,len);
            System.out.println(s);
            //遍历byte数组
            System.out.println(Arrays.toString(car));
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                // 释放资源
                if(null!=in){
                    in.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
}

5.基本输出流
Writer

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

/*
写出数据(字符)到文件
1、确定目的地
2、选择流和目的地建立联系
3、写数据出去
3.1  强刷数据
4、释放资源(关闭流)

写出  nice  到 test.txt 的文件
 */
public class Demo006 {
    public static void main(String[] args) throws Exception {
        //1.确定目的地
        //文件不存在的时候会自动创建
        //文件存在会覆盖原文件
        File file=new File("test.txt");
        //2.选择流
        Writer writer=new FileWriter(file);

        //3.写出数据
        char[] data={'n','i','c','e'};
        writer.write(data);

        String str=" to meet you.";
        writer.write(str);
        //4.强刷
        writer.flush();
        //5.关闭流
        writer.close();
    }
}

方式二:
OutputStream
FileOutputStream

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/*
字节输出流   只能是字节
 */
public class Demo007 {
    public static void main(String[] args) throws Exception {
        // 确定目的地
        File file = new File("test1.txt");
        // 选择流
        OutputStream os=new FileOutputStream(file);
        // 写数据
        byte[] data="nice!!!".getBytes("GBK");
        os.write(data);
        //刷新
        os.flush();
        //关闭流
        os.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值