看此篇博文前推荐看看这篇几篇,有助于了解File类的各种方法和递归遍历方式
传送门:
JAVA I/O小结(一)——File类
JAVA I/O小结(二)——File类的递归遍历
根据数据的流向区分:输入流 和 输出流
根据数据的类型区分:字节流(8bit) 和 字符流(16bit)
由此可得出如下表格:
? | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
在这章就主要讲解下字节流的输入输出
注意1:对I/O进行操作需要进行异常的抛出或者跳过,使用“throws”或者“try-catch”来处理异常
注意2:使用完I/O流后一定要关闭I/O流,遵循先开后关,后开先关的原则
这里的输入,是指从硬盘里的文件输入到内存中。可以理解为从文件中将数据输入到代码里,是文件对代码的输入
在读取操作中使用的read方法,在读取到数据末尾没有数据的时候会返回“-1”,所以可以进行一下读取操作,文件使用的是前几章所创建的文件。
具体操作代码如下:
try {
FileInputStream in = new FileInputStream("./test123.txt");//指定从test123输入数据
byte[] bytes = new byte[15];//读取数组的大小
int len = 0;//设置读取数据的长度
while(( len= in.read(bytes)) != -1){//这里先将读出的长度存入len,在判断read返回的数据是否为-1
//System.out.println(len);//这里可以看到读取在循环内的len值,为数据的总字节长度
System.out.println(new String(bytes,0,len));//new String(缓冲数据的数组,起始位,长度)
}
//System.out.println(len);//这里可以看到最终len的值,为-1
in.close();//使用完一定要关闭流,一定!
} catch (Exception e) { //因为异常很多,所以用Exception
e.printStackTrace();
}
结果:
这里的结果并未向所展示代码中那样注释了“len”输出,可以看到“len”在while循环内输出的值为12,在循环外输出值为-1。因为在UTF-8编码中,一个中文字符占三个字节,所以阿巴阿巴
的长度输出为12个字节。
这里的输出,是指从内存输出到硬盘里的文件中。可以理解为从代码中将数据输出到文件里,是代码对文件的输出
相比输入而言,输出就显得简单许多,要注意先“write”存到内存中,再“flush”写到硬盘里
代码如下:
try {
FileOutputStream out = new FileOutputStream("./test123.txt");//制定从test123输出数据,默认覆盖写入,写入true为接在之前数据的后面继续写入
String str = "玛卡巴卡";
out.write(str.getBytes());//把数据写到内存中
out.flush();//把内存的数据刷写到硬盘
out.close();//使用完一定要关闭流
} catch (Exception e) {//因为异常很多,所以用Exception
e.printStackTrace();
}
结果:
这里就可以看到文件内数据被覆盖写入,从阿巴阿巴
修改为玛卡巴卡
如有问题欢迎指正
vbs:把一段文字中指定字符颜色变成红色的正则 functionc(Tstr,Word) Dimre Setre...
一、正则表达式概述 二、正则表达式在VBScript中的应用 三、正则表达式在VavaScr...
计算属性computed: 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持...
微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很...
一石激起千层浪,继中国区浩浩荡荡的大裁员告一段落之后,甲骨文并未因此收起手...
歌词编辑器 歌词编辑器 第一步:选择要播放的歌曲并播放 第二步:填写全部的歌词...
ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可...
【排序算法】之lowb三人组冒泡、插入、选择 什么是lowb三人组 冒泡排序bubble so...
前言 相信大家都知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也...
本文将研究 ES6 的 for ... of 循环。 旧方法 在过去,有两种方法可以遍历 javas...