day24知识点总结:字节输入输出流 字符输入流

修改文件扩展名(将.txt修改为.java)
第一步:点击文件夹
在这里插入图片描述
第二步:点击查看选项
在这里插入图片描述
第三步:在“文件扩展名”选项前打√
在这里插入图片描述
第四步:点击要修改文件,点击“重命名”,将文件名改为“.java”的形式
递归遍历文件夹下面的目录

字符流就是操作文件

IO

对文件内容进行读取或者复制粘贴
根据数据的流向分为:“input”和"output"
input:输入流 读
把数据从其他设备读取到内存中的流。
output:输出流 写
把数据从内存读取到其他设备上的流。
根据数据的类型分为:字节流和字符流
字节流:以字节为单位 读取数据的流
字符流:以字符为单位 读取数据的流

顶级父类
字节输入流:InputStream
字节输出流:OutputStream //是抽象类 不能new对象 FileOutputStream是其子类
字符输入流:Reader
字符输入流:Writer

OutputStream字节输出流

创建 字节输出流对象(2种方式)

//方式一
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//方式二
File file=new File("D:\\java\\javacto\\aa.txt");
FileOutputStream fos1=new FileOutputStream(file);
//考虑向FileOutputStream()传值,但是还没有传值
//把鼠标放在new FileOutputStream()上 按住ctrl点鼠标左键 就会显示所有含参方法

对文件执行写操作(write(int b))方法
三步走

//1.创建FileOutputStream对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");

//2.执行写操作
fos.write(97);//写入第一个字节
fos.write(98);
fos.write(99);
fos.write(100);

//关闭字节流
fos.close();

运行截图:
在这里插入图片描述
将字符串转为字符数组写入字符输出流

//1.创建字符输出流对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//2.将字符串转为字符数组
byte[] b="我在跟老师学IO";
//3.将字符数组写入字符输出流
fos.write(b);
//4.关闭流
fos.close();

运行截图
在这里插入图片描述
字符数组指定字符写入字符输入流

//1.创建 字符输入流
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");

//2.将字符串转为字符数组
byte b[]="abcdefg".getBytes();

//3.将字符cd写入 字符输入流
fos.write(b,2,2);
//写write(byte[] b,int off从索引几开始,int len总共写几个)

//关闭流
fos.close();

运行截图:
在这里插入图片描述
向文件中写入内容保证不将之前的值覆盖
在文件路径名后加true


//1.创建 字节输入流对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt",true);
//2.将字符串转为字符数组
byte[] b="不覆盖之前的值".getBytes();
//3.将数组的全部内容 写入字符输入流中
fos.write(b,0,b.length);
//4.关闭流
fos.close();

运行截图:
在这里插入图片描述
将写入内容并换行

//1.创建字符输出流对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//2.创建字符数组
byte[] b={97,98,99};
//3.将输入的字符数组输入并换行
for(int i=0;i<b.length;i++){
	fos.write(b[i]);
	fos.write("\r".getBytes());\\换行
}
//4.关闭流
fos.close();

运行截图
在这里插入图片描述

InputStream字节输入流

//1.创建字节输入流对象
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
//注:文件中只有abcd四个字符
//2.读取数据
int read=fis.read();//每次读取一个字节
System.out.print(read);//将数字转为字符 输出

read=fis.read();
System.out.print((char) read);

read=fis.read();
System.out.print((char) read);

read=fis.read();
System.out.print((char) read);

read=fis.read();//读第5个 请问还有没有值?没有 返回-1 最后不能有空格或者回车
System.out.print(read);
//注:最后以int形式输出

循环遍历输出字符

//1.创建FileInputStream字节输入流对象 就是读
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
//2.定义变量
int b;
//3.循环遍历
while((b=fis.read)!=-1){
	System.out.print((char)b);
}
//4.关闭流
fis.close();

运行截图
在这里插入图片描述
将字符以规定长度输出

//1.创建字符输入流对象
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
//2.定义变量
int len;
byte[] b=new byte[2];
//3.循环遍历
while((len=fis.read(b))!=-1){//每次读取2个字符
	//每次读到后 将字符串转为数组
	System.out.println(b);
}

运行截图
在这里插入图片描述
复制文件(什么文件都可以)

//1.创建输入流 用来读取数据
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\原图.jpg");
//2.创建输出流 用来写数据
FileOutputStream fis=new FileOutputStream("D:\\java\\javacto\\copy.jpg");
//3.定义长度
int length;
//定义数组
byte[] b=new byte[1024];
//循环遍历
while((len=fis.read(b))!=-1){
	//写
	fos.write(b,0,len);
}
//4.释放资源
fos.close();
fis.close();

运行截图
在这里插入图片描述

字符流

专门用来处理 文本文件
解决字节流 读取文本文件遇到中文字符可能不会显示完整字符 问题
字符输入流Reader

    //1.创建字符输入流 读取数据
        FileReader fr=new FileReader("D:\\java\\javacto\\aa.txt");

        int len;//定义长度
        //2.循环遍历
        while ((len=fr.read())!=-1){
            System.out.println((char) len);
        }
        //3.释放资源
        fr.close();

运行截图:
在这里插入图片描述

//1.创建 字符输入流 读取数据
        FileReader fr=new FileReader("D:\\java\\javacto\\aa.txt");
        int len;//定义长度
        char c[]=new char[1024];
        //2.循环遍历
        while ((len= fr.read(c))!=-1){
            //System.out.println((char) len);
            //如果每次读取多个,输出 就不能把值赋值到char
            System.out.println(new String(c,0,len));
        }
        //4.释放资源
        fr.close();

运行截图:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值