字节输入流即之前的结尾

一、换行
windows:\r\n
linux:\n
mac:\r
getBytes()方法可以将字符串的码找出来从而在写文件时更方便

二、追加写入
在创建字节流对象时,在路径后面加上true就是追加写入模式

三、异常处理
finally块用来执行所有清除操作,比如这里IO流的释放资源
被finally控制的语句一定会执行,除非JVM退出

四、字节流读数据
FileInputStream()字节输入流
read()读一个字节,并且转换成ASCII码,要想读出得强制转换成char型
read一次读一个,读到末尾返回-1

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

public class InputTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("C:\\data\\word.txt");//在目录后面加上true就会变成追加模式,不会覆盖原文件了
//        getByte方法简化了写文件
        fos.write("abc".getBytes());
//        仍然可以通过换行符换行,但是注意操作系统
        fos.write("\n".getBytes());
        fos.write("hello".getBytes());
        fos.write("\n".getBytes());
        fos.write("world".getBytes());
        fos.close();
        FileInputStream fis=new FileInputStream("C:\\data\\word.txt");
//        一次只读一个字节,剩下的下次read在读
        System.out.println((char) fis.read());
        int f;
//        从结果可以看出,第一行的a在上面读了,循环里就没有读它
//        循环条件里,被括号包着的每次循环都给f赋值了,简化了代码
        while((f=fis.read())!=-1){
            System.out.print((char) f);
        }
        fis.close();
    }
}

结果

追加:一次读一个byte数组的数据

创建数据输入流对象:FileInputStream fis=new FileInputStream("")
先定义一个字符数组:byte[] bye=new byte(int)
再读取出一个数组的数据:fis.read(bye)
注意:由于读出的数据先存放进数组中,所以再次读取时后面的数据会覆盖之前的数据
并且它的返回值是读取数据的长度,而不是数组的长度,这就会导致读取到最后几个数
据的时候,数组中会留有上一次读取的数据,而返回值确实这一次读取数据的长度

下面是一个练习

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

public class readTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("C:\\data\\test.txt");
        /*
        * 文件test中的数据为
        * hello
        * world
        * */
//        第一次读取,这个数组只能读5个,说以读了hello,返回5
        byte[] bye=new byte[5];
        int len=fis.read(bye);
        System.out.println(len);
        System.out.println(new String(bye));
//          第二次读取,仍然读取5个,这次读取的是\r\n加上wor,从结果那里换了一行可以看出来
        len=fis.read(bye);
        System.out.println(len);
        System.out.println(new String(bye));
//          第三次读取只剩下ld可以读取,所以返回了2,并且覆盖掉了数组前两个数据,所以数组中现在是ldwor
        len=fis.read(bye);
        System.out.println(len);
        System.out.println(new String(bye));
    }
}

结果

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值