字节输入输出流:每次只操作一个字节(读取或写入),字节操作流,默认每次执行写入操作会直接把数据写入文件.
io流:
输入流:Input;
输出流:Output
流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象,即数组在两台设备间传输为流;
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便进行数据操作;
io流的分类:
根据处理数据类型的不同分为:字符流和字节流;
根据数据流向不同分为:输入流和输出流;
字节是数据传输的基本单位,文件内容也是以字节为单位存储的,从文件中把数据读到程序为输入流,从程序把数据写到文件称为输出流,都是相对于程序;
字节输出流:
OutputStream:此为抽象类,所有输出字节流的超类,向文件中输出使用FileOutputStream类;
字节输入流:
InputStream:所有字节输入流的超类,向程序输入使用FileInputStream;
private static void out(){
//创建指定的文件操作对象
File f1=new File("D:/files/test1.txt");
try {
//创建文件输出流,默认为覆盖内容输出,true表示追加输出
OutputStream os=new FileOutputStream(f1,true);
//获取计算机换行符
String h=System.getProperty("line.separator");
//要输出的字符
String ss="你好,字节输出流"+h;
//将字符输出到文件中
os.write(ss.getBytes());
//关闭字节输出流
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void in(){
//先确定要输入的文件
File f1=new File("D:/files/test1.txt");
//创建字节输入流对象
try {
InputStream is=new FileInputStream(f1);
//创建一个字节数组,用来接收输入流,长度不可为奇数或1,否则乱码,再不确定长度时需要写while循环,并添加时写0,len:sb.append(new String(bytes,0,bytes.length));
byte[] bytes=new byte[100];
//用来存储字节数组的长度
int len=-1;
//创建字符流
StringBuilder sb=new StringBuilder();
//将输入流的文件循环读取并保存在字节数组中
while ((len=is.read(bytes))!=-1){
//将读取出来的字节数组转换成字符添加进字符流
sb.append(new String(bytes,0,len));
}
System.out.println(sb);
// if (is.read(bytes)!=-1){//在确定字节时可使用if
// //创建字符流
// StringBuilder sb=new StringBuilder();
// //将读取出来的字节数组转换成字符添加进字符流
// sb.append(new String(bytes));
// System.out.println(sb);
// }
//关闭字节输入流
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
--------------------------------------
out();
in();
本章概述了java中文件操作的字节输入/输出流,该类是File类的字节增强实现,在处理一些文件时,可优先选择字节输入/输出流,而不是直接使用File类;
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴,可以私信我,我会一一答复,感谢认可,感谢支持!