【Java】IO流之字节流

目录

一、FileOutputStream

写数据的3中方式

写数据的换行和续写

案例

二、FileInputStream

读的三种方法

案例


首先,我们需要知道输出流与输入流是相对于谁来说的。是相对于内存/程序来说的。

文件 ----->  内存 :输入流

内存 ----->  文件 :输出流

字节流分为InputStream(字节输入流) 和 OutputStream(字节输出流) ,这两个类都是抽象类,不能实例化出来,如果需要用的话,根据它子类来实例化对应的对象。这里主要讲操作本地文件的字节输入流和输出流

一、FileOutputStream

操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。

语法:

FileOutputStream fos = new FileOutputStream(参数);

实现步骤:

1)创建字节输出流对象

细节1:参数是字符串表示的路径或者是File对象都是可以的

细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的

细节3:如果文件已经存在,则会覆盖文件

2)写数据

细节:write方法的参数是整数,但实际上写到本地文件的是整数在ASCII上对应的字符

3)释放资源

每次使用完流之后都要释放资源

写数据的3中方式
方法名称说明
void write(int b)一次写一个字节数据
void write(byte[] b)一次写一个字节数组数据
void write(byte[] b,int off,int len)一次写一个字节数组的部分数据,off:起始索引,len:个数
写数据的换行和续写

换行写:

再写一次换行符就可以了

Windows:\r\n

Linux: \n

Mac:\r

在Windows操作系统中,java对回车换行进行了优化,但是完整的是\r\n,但是我们写其中的一个\r或者\n也是可以的。因为java在底层会补全

续写:

第二参数表示是否要续写,默认是false表示不续写,true表示续写

案例

a.txt文件原本内容为:aaaaaa

运行程序后:

aaaaaafdasdfs
777

package myio;

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputStreamTest {
    public static void main(String[] args) throws IOException {
        //1、创建对象
        FileOutputStream fos = new FileOutputStream("a.txt",true);
        //2、写出数据
        String str = "afdasdfs";
        byte[] bytes1 = str.getBytes();
        fos.write(bytes1);

        //换行
        String wrap = "\r\n";
        byte[] bytes2 = wrap.getBytes();
        fos.write(bytes2);

        String str2 = "777";
        byte[] bytes3 = str2.getBytes();
        fos.write(bytes3);

        //3、释放资源
        fos.close();
    }
}
二、FileInputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序/内存中来。

实现步骤:

1)创建字节输入流对象

如果文件不存在,就直接报错

2)读数据

1、read无参方法读出来的是数据在ASCII上对应的数字

2、从输入流中读取数据的下一个字节 ,读到文件末尾了,read方法返回-1。

3)释放资源

每次使用完流之后都要释放资源

读的三种方法
方法名称说明
public int read()一次读取一个字节数据,返回读到的字节值
public int read(byte[] buffer)一次读取一个字节数组数据,返回读取多少个字节数据
public int read(byte[] buffer int off,int len )一次读取一个字节数组的部分数据
案例

a.txt文件的内容:abcde

package myio;

import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamTest {
    public static void main(String[] args) throws IOException {
        
        //1、创建对象
        FileInputStream fis = new FileInputStream("a.txt");
        //2、循环读取,效率低
        int b ;
        while((b = fis.read()) != -1){
            System.out.print((char)b);
        }
        fis.close();
        
        System.out.println("---------");
        FileInputStream fis1 = new FileInputStream("a.txt");
        byte[] bytes = new byte[2];
        int len;//用于接收读取到了多少个字节数据
        //效率相对高
        while((len = fis1.read(bytes)) != -1){
            String str = new String(bytes,0,len);//len值 2 2 1
            System.out.print(str);//str值 ab cd e
        }
        fis1.close();
        
        //错误写法 ,数据丢失
        /*
        FileInputStream fis = new FileInputStream("a.txt");
        //2、循环读取
        while( fis.read()!= -1){
            System.out.print((char)fis.read());
        }
        fis.close();

         */
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值