java基础io流——OutputStream和InputStream的故事

outputStream.close();

完整示例:

package io2;

import java.io.FileOutputStream;

import java.io.IOException;

/**

  • new FileOutputStream(“a.txt”,true); 第二个参数true,设置为写入的数据拼接在尾部

  • \n\r 换行

  • write(bys,1,3); 写入字节数组

*/

public class out {

public static void main(String args[]){

FileOutputStream outputStream = null;

try {

//FileOutputStream fos = new FileOutputStream(file);

outputStream = new FileOutputStream(“a.txt”,true);

/*

  • 创建字节输出流对象了做了几件事情:

  • A:调用系统功能去创建文件

  • B:创建outputStream对象

  • C:把foutputStream对象指向这个文件

*/

// for (int i = 0; i <5 ; i++) {

// outputStream.write(“hello”.getBytes());

// outputStream.write(“\n\r”.getBytes());

// }

byte[] bys={97,98,99,100,101};

outputStream.write(bys,1,3);

} catch (IOException e) {

e.printStackTrace();

}

finally {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

InputStream的子类FileInputStream

FileInputStream的构造方法

FileInputStream(File file)

FileInputStream(String name)

推荐第二种构造方法:

FileInputStream inputStream = new FileInputStream(“a.txt”);

把刚才写的数据现在读取到控制台:

public int read()

public int read(byte[] b)

第一个read是读一个字节,第二个read是读一个字节数组。

//读一个字节

int by = 0;

while ((by=inputStream.read())!=-1){

System.out.println((char)by);

}

读到没数据了就返回-1,这个用来判断是否读完。

//读一个字节数组,一般是1024大小

int len = 0 ;

byte[] bys = new byte[1024];

while ((len = inputStream.read(bys)) != -1) {

System.out.println(new String(bys,0,len));

}

两个read的返回值略有不同,read()返回读取的字节,读到末尾返回-1,read(byte[] b)返回的是读到的字节个数,读到的字节放在了bytes字节数组里,读到末尾没数据了返回-1。

两种读取方式图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yv0oyKLy-1603813798619)(http://p5kllyq5h.bkt.clouddn.com/174401.jpg)]

同样的用完了流,也要及时的关闭,以防占用内存。

inputStream.close();

完整示例:

建议以字节数组的方式读取数据。

package io2;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

/**

  • Create by stefan

  • Date on 2018-05-27 23:00

  • Convertion over Configuration!

*/

public class input2 {

public static void main(String args[]){

FileInputStream inputStream = null;

try {

inputStream = new FileInputStream(“a.txt”);

// byte[] bys = new byte[4];

// int len = inputStream.read(bys);

// System.out.println(new String(bys)); //bcd

// System.out.println(len); //3

// System.out.println(inputStream.read(bys)); //-1

int len = 0 ;

byte[] bys = new byte[1024];

while ((len = inputStream.read(bys)) != -1) {

System.out.println(new String(bys,0,len));

}

/**

  • public String(byte bytes[]) {

this(bytes, 0, bytes.length);

}

*/

} catch (IOException e) {

e.printStackTrace();

}finally {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

字节流复制文件

利用输入流读取一个文件里的字节,再利用输出流将读取到的字节写出到另一个文件中(不存在会自动创建)

package io2;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Arrays;

/**

  • Create by stefan

  • Date on 2018-05-27 23:19

  • Convertion over Configuration!

*/

public class copy {

public static void main(String args[]) throws IOException {

FileInputStream inputStream = new FileInputStream(“E:\huge1.jpg”);

FileOutputStream outputStream = new FileOutputStream(“E:\古月.jpg”);

byte[] bytes = new byte[1024];

int len = 0;

while ((len=inputStream.read(bytes)) != -1) {

outputStream.write(bytes,0,len);

}

inputStream.close();

outputStream.close();

}

}

注:复制文本、图片、mp3、视频等的方式一样。

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果。

java本身在设计的时候,也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流。

字节缓冲输出流

BufferedOutputStream

字节缓冲输入流

BufferedInputStream

BufferedOutputStream

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(“a.txt”,true));

bos.write(“hello world”.getBytes());

bos.close();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
注Java获取)**

img

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

[外链图片转存中…(img-bVZwiyln-1712122347548)]

[外链图片转存中…(img-HdeZzSDG-1712122347548)]

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值