Java IO字节输入输出流

OutPutStream使用:

// 文件路径
File f1 = new File("C:\\Users\\Yxb\\Desktop\\test.txt");
// 因为OutputStream是抽象类 没法实例化 通过向上转型实例化子类来使用
OutputStream out = new FileOutputStream(f1);

通过.write()方法向文件中写入内容

out.write(97);

 

可以看到写入的内容是a 这是因为它是根据ASCII码表来写入内容的。我们如果向写入东西还要对照ASCII码表来输入所对应的十进制数字,这样效率太慢了,那么我们应该怎样写入自己想要写入的内容呢?

我们可以将想要写入的内容写在String类型中,然后通过String类的.getBytes()方法将这些内容变成byte数组,然后通过.write()方法向文件中写入内容,参数为byte数组
 

String str = "97";
out.write(str.getBytes());

 

这样就可以写入我们想要写入的内容了。

可是现在还有一个问题,如果我们每次运行代码它都会将原本的内容替换成我们想要输入的内容,没法接着后面继续写入。这是因为它的FileOutputStream参数后面会默认是false,我们只需要改成true即可

OutputStream out = new FileOutputStream(f2,false);// (默认false)替换原本内容
​OutputStream out = new FileOutputStream(f2,true);// 在原本的内容后面继续写入

InputStreanm使用:

File f1 = new File("C:\\Users\\Yxb\\Desktop\\test.txt");
InputStream in = new FileInputStream(f1);

.read()进行操作

// 如果到达流末尾而没有可用的字节,则返回值 -1
int read = in.read();
// read为ASCII码表中所对应的十进制数字,使用强制类型转换变成char类型
System.out.println((char)read);

这样我们每次就可以读取一个字节,这样效率太慢了。因为到达流末尾没有可用的字节,则返回值-1,那么我们可以使用循环来打印所有内容。

int n;
while((n = in.read())>0){
    System.out.print((char)n);
}

或者

// 声明一个byte数组,长度随意
byte[] b = new byte[10];
// 声明一个int类型的值
int i2;
// while循环,将.read(b)的值赋值给i2,判断条件如果i2大于0则证明数组中有值,否则结束循环
while ((i2 = in.read(b)) > 0) {
// String的有参构造方法 
// String s = new String(byte[] b); 将byte数组传入String的构造方法中,打印s即可
    String s = new String(b,0,i2);
    System.out.print(s);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蔡不会编码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值