您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-IO之字节流
发布时间:2017-08-10 14:27:34编辑:雪饮阅读()
IO流概述
IO流:输入输出流(Input/Ouput)
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
字节输出流
OutputStream类定义
public abstract class OutputStreamextends ObjectimplementsCloseable,Flushable
此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。
字节输出流常用方法:
OutputStream类只是一个抽象类,抽象类必须通过子类完成,现在要向文件中输出,使用FileOutputStream类。
示例代码:
package com.vince.bytestream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
/*
字节输出流的方式一:每次输出一个字节
*/
public static void write1(){
try{
//创建一个文件字节输出流对象
OutputStream out =new FileOutputStream("E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt");
String info="hello,IO";
//字节数组
byte[] bytes=info.getBytes();
for(int i=0;i<bytes.length;i++){
//向文件中输出
out.write(bytes[i]);
}
//向文件中写入,这种类型数据可以直接写入
//这里输出了,但是文本文件打开后看不到东西,为了证实确实输出了,可以将上面的for循环注释并将文本内容用退格键清空只最左上角处保存,然后发现文本大小是0,然后再次执行本程序再观察文本文件的大小是1
out.write(1);
//关闭流
out.close();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
write1();
}
}
代码示例2:每次输出指定长度字符
package com.vince.bytestream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo {
/*
字节输出流的方式一:每次输出指定大小的字节
*/
public static void write2(){
try{
//创建一个文件字节输出流对象
String path="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
//true参数表示以追加的方式写入
OutputStream out =new FileOutputStream(path,true);
String info="gaoJiuPanLoveDuMinJie";
//字节数组
byte[] bytes=info.getBytes();
//完整写入
out.write(bytes);
//指定大小写入
out.write(bytes,0,5);
out.close();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
write2();
}
}
字节输入流
InputStream类定义:
public abstract class InputStreamextendsObjectimplementsCloseable
此抽象类是表示字节输入流的所有类的超类。
FileInputStream从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileReader。
示例代码:
package com.vince.bytestream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
/*字节输入流的读取方式一:每次读取一个字节
*
* */
public static void read1(){
//构造一个字节输入流对象
try {
//构造一个字节输入流对象
String path="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
InputStream in=new FileInputStream(path);
int b=-1;//定义一个字节,-1表示没有数据
while((b=in.read())!=-1){
//每次将输入的b打印到控制台上
//这里获取的b是ascll码的数据
//所以这里需要将ascll码的int型强制转换成字符
System.out.println((char)b);
}
//关闭读取
in.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
read1();
}
}
示例代码二:一次性读取字符流
package com.vince.bytestream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
public static void read2(){
try {
String path="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
File f=new File(path);
InputStream in=new FileInputStream(f);
//根据文件的大小构造字节数组(空字节数组,主要是为了初始化字节数组的长度值)
//f.length()获取的是long类型,所以要转换成int类型
byte[] bytes=new byte[(int)f.length()];
//获取输入到缓冲区中的字节总数
int len=in.read(bytes);
//将数组(字节数组)转换成字符串
System.out.println(new String(bytes));
System.out.println(len);
//关闭读取
in.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {read2();}
}
示例代码:自定义每次读取长度
package com.vince.bytestream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
public static void read3(){
try {
String path="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
File f=new File(path);
InputStream in=new FileInputStream(f);
//指定每次要读取的大小
byte[] bytes=new byte[10];
//每次读取的实际长度(考虑到,有可能读取的 文件末尾时有不足10个的情况)
int len;
StringBuilder sb=new StringBuilder();
while((len=in.read(bytes))!=-1){
//这里获取每次实际读取到缓冲区的字节数,如果为-1就出现异常了
//每次从缓冲区中取出读取进缓冲区的字节,toString后拼接到之前读取的
sb.append(new String(bytes,0,len));
}
//关闭读取
in.close();
System.out.println(sb);
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {read3();}
}
关键字词:javase,io,字节流