java io字节流和字符流,java io流
一、绪论
如果要对文件内容进行操作,就必须依靠数据流,而数据流可以分为两种类型:
字节流:InputStream(字节输入流)和OutputStream(字节输出流);
字符流:阅读器(字符输入流),写入器(字符输出流);
二、区别
字节流是原生操作,而字符流是经过处理的操作。
网络数据传输和磁盘数据存储支持的数据类型只有:字节。操作前必须将磁盘中的所有数据读入内存,内存会帮助我们将字节变成字符。字符更适合处理中文。如果字符流用于处理中文,字节流用于任何其他数据。
相关学习视频推荐:java学习视频
三、字节输出流:(OutputStream)
OutputStream类定义了三种重要的输出操作方法:
1.输出给定字节数组的所有内容:
公共void写入(字节b [])引发IO异常2。输出一些字节数组内容:(强调)
Public void write (byte b [],int off,int len)抛出io异常3。输出一个字节:
公共抽象void write (int b)抛出IOException OutputStream是一个抽象类。根据抽象类的基本原理,要想得到OutputStream类的实例化对象,必须有一个子类。如果要操作文件,可以使用FileOutputStream类来处理。该类的构造方法如下:
1. 接收File类(覆盖):
公共FileOutputStream(File file)抛出FileNotFoundException2. 接收File类(追加):
公共文件输出流(file file,boolean append)//第一步:定义要输出的文件的File类对象。
File File=new File( e: File . separator hello File . separator my . txt );
//输出信息时文件可以不存在,但目录必须存在。
如果(!File.getparentfile()。exists()){//父路径不存在
file.getParentFile()。mkdirs();//创建父路径
}
//第二步:使用OutputStream的子类实例化父类
output stream output=new file output stream(file);
//第三步:输出文本信息
msg=‘富者济世,贫者独善其身’;//字符串
//为了便于输出,需要将字符串改为字节数组
byte data[]=msg . getbytes();//成为字节数组
输出.写入(数据);//输出数据
output . close();//关闭流输出文件的部分内容
output.write(data,0,10);//输出部分数据,以循环方式输出单字节信息。
for(int x=0;x数据长度;x ) {
output . write(data[x]);//单字节输出数据
}但是使用单字节输出会覆盖之前的一切。因此,有必要添加数据。
output stream output=new file output stream(file,true);//这里是附加操作四、字节输入流:(InputStream)。
InputStream类中定义了三种数据读取方法:
1.读取单个字节:
公共抽象int read()抛出IOException每次执行该方法时,都会读取数据的当前字节。如果读取已经完成,最终返回-1。
2.读取数据到字节数组中:
Public int read (byte b [])抛出IO异常。最常用的方法,每次数据读入数组,都会返回一个读取长度的数据。如果没有数据,则返回的长度为-1。
但是有两种情况需要考虑:
要读取的内容大于打开的数组内容:长度是整个数组的长度。
要读取的内容小于开放数组的内容,长度都是最后的内容长度,所以不满足程序集的个数。
3.读取部分内容到字节数组中:
Public int read (byte b [],int off,int len)每次将东西读入部分字节数组时抛出IO异常,只能读取全极限数组的字节数。这个方法仍然返回读取长度。
InputStream是一个抽象类,因此要读取文件,需要使用FileInputStream子类。子类定义的构造如下:
方法:公共文件输入流(文件File)抛出找不到文件异常。//第一步:定义要输出的文件的文件类对象。
File File=新文件( e: File。分隔符 hello 文件。分隔符 my。txt’);
//第二步:实例化输入流
InputStream input=新文件InputStream(file);
//实现数据的读取操作
字节数据[]=新字节[1024];
int len=输入。读(数据);//将数据读取到数组之中
System.out.println(读取的内容【‘new String(data,0,len)’】’);
//第四步关闭输入流
输入。close();补充:数据输入流和输出流
输入流类继承了输入流。也就是说输入流是输入流的子类。但它们同是实现了数据输入接口。
输出流类继承了输出流。也就是说输出流是输出流的子类。但它们同是实现了数据输出接口。
五、字符输出流:(Writer)
作者是一个抽象类,要进行文件字符流操作可以使用字符输出流类处理,其构造方法为:
公共文件编写器(文件文件)//第一步:定义要输出的文件的文件类对象
File File=新文件( e: File。分隔符 hello 文件。分隔符 my。txt’);//你的路径
如果(!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
writer out=new FileWriter(file);
字符串str=一定要好好学习,天天向上。;
出去。write(str);
出去。close();虽然作者类提供有字符数组的输出操作能力,但是从本质上来讲使用作者类就意味着要执行字符串的直接输出。字符流最适合操作中文,但并不意味着字节流就无法操作中文。
六、字符输入流:(Reader)
读者是一个抽象类,要进行文件字符流操作可以使用字符输入流类处理,其构造方法为:
公共文件读取器(文件文件)//第一步:定义要输出的文件的文件类对象
File File=新文件( e: File。分隔符 hello 文件。分隔符 my。txt’);//你的路径
if(file.exists()) {
reader in=新文件阅读器(file);
char data[]=new char[1024];
int len=in.read(数据);//向字符数组保存数据,返回长度。
系统。出去。println(新字符串(data,0,len));
英寸close();七、补充
为了提高字符流读写的效率,引入了缓冲机制,java提供了缓存流类:BufferedInputStream、BufferedOutputStream类和BufferedReader、BufferedWriter类
//使用缓冲器进行文件读写
BufferedInputStream BufferedInputStream=new BufferedInputStream(新文件输入流
(新文件( D:\ \大爆炸-如果你(活)。MP3’));
File new File=new File( D:\ \复制音乐\ \大爆炸-如果你(Live)。MP3’);
新文件。创建新文件();
BufferedOutputStream BufferedOutputStream=new BufferedOutputStream(新文件输出流(新文件));
字节[]字节=新字节[1024];
int length=0;
while((length=bufferedinputstream。read(字节))!=-1){
bufferedOutputStream.write(字节,0,长度);
}相关文章教程推荐:java开发入门以上就是关于爪哇岛中输入-输出流的字节流与字符流的详细介绍的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。