文件读取和写入(字节流和字符流)
什么是字节流?
- 字节流的类通常以stream结尾
字节流--传输过程中,传输数据的最基本单位是字节的流。
什么是字符流?
- 字符流的类通常以reader和writer结尾
字符流--传输过程中,传输数据的最基本单位是字符的流。
字节输入流:
常用的字节输入流主要有:
- InputStream
- FileInputStream
- BufferedInputStream 【BufferedInputStream不是InputStream的直接实现子类,是FilterInputStream的子类】
他们的区别与用途:
- InputStream是字节输入流的抽象基类 ,InputStream作为基类,给它的基类定义了几个通用的函数:
- read(byte[] b):从流中读取b的长度个字节的数据存储到b中,返回结果是读取的字节个数(当再次读时,如果返回-1说明到了结尾,没有了数据)
read(byte[] b, int off, int len):从流中从off的位置开始读取len个字节的数据存储到b中,返回结果是实际读取到的字节个数(当再次读时,如果返回-1说明到了结尾,没有了数据)
- close():关闭流,释放资源。
- FileInputStream主要用来操作文件输入流,它除了可以使用基类定义的函数外,它还实现了基类的read()函数(无参的):
- read():从流中读取1个字节的数据,返回结果是一个int,(如果编码是以一个字节一个字符的,可以尝试转成char,用来查看数据)。
- BufferedInputStream带有缓冲的意思,普通的读是从硬盘里面读,而带有缓冲区之后,BufferedInputStream已经提前将数据封装到内存中,内存中操作数据要快,所以它的效率要要非缓冲的要高。它除了可以使用基类定义的函数外,它还实现了基类的read()函数(无参的):
- read():从流中读取1个字节的数据,返回结果是一个int,(如果编码是以一个字节一个字符的,可以尝试转成char,用来查看数据)。
- InputStream是字节输入流的抽象基类 ,InputStream作为基类,给它的基类定义了几个通用的函数:
字节输出流:
常用的字节输出流主要有:
- OutputStream
- FileOutputStream
- BufferedOutputStream 【BufferedOutputStream不是OutputStream的直接实现子类,是FilterOutputStream的子类】
他们的区别与用途:
- OutputStream是字节输出流的基类, OutputStream作为基类,给它的基类定义了几个通用的函数:
- write(byte[] b):将b的长度个字节数据写到输出流中。
- write(byte[] b,int off,int len):从b的off位置开始,获取len个字节数据,写到输出流中。
- flush():刷新输出流,把数据马上写到输出流中。
- close():关闭流,释放系统资源。
- FileOutputStream是用于写文件的输出流,它除了可以使用基类定义的函数外,还实现了OutputStream的抽象函数write(int b):
- write(int b):将b转成一个字节数据,写到输出流中。
- BufferedOutputStream像上面那个BufferedInputStream一样,都可以提高效率。它除了可以使用基类定义的函数外,它还实现了OutputStream的抽象函数write(int b):
- write(int b):将b转成一个字节数据,写到输出流中。
字符输入流:
常见的字符输入流有:
- Reader
- InputStreamReader
- FileReader
- BufferedReader
他们的区别与用途:
- Reader是字符输入流的抽象基类 ,它定义了以下几个函数:
- read() :读取单个字符,返回结果是一个int,需要转成char;到达流的末尾时,返回-1
- read(char[] cbuf):读取cbuf的长度个字符到cbuf这种,返回结果是读取的字符数,到达流的末尾时,返回-1
- close() :关闭流,释放占用的系统资源。
- InputStreamReader 可以把InputStream中的字节数据流根据字符编码方式转成字符数据流。它除了可以使用基类定义的函数,它自己还实现了以下函数:
- read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1
- FileReader 可以把FileInputStream中的字节数据转成根据字符编码方式转成字符数据流。
- BufferedReader可以把字符输入流进行封装,将数据进行缓冲,提高读取效率。它除了可以使用基类定义的函数,它自己还实现了以下函数:
- read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1
- readLine() :读取一个文本行,以行结束符作为末尾,返回结果是读取的字符串。如果已到达流末尾,则返回 null
字符输出流:
常见的字符输出流有:
- Writer
- OutputStreamWriter
- FileWriter
- BufferedWriter
他们的区别与用途:
- Writer是字符输出流的抽象基类, ,它定义了以下几个函数
- write(char[] cbuf) :往输出流写入一个字符数组。
- write(int c) :往输出流写入一个字符。
- write(String str) :往输出流写入一串字符串。
- write(String str, int off, int len) :往输出流写入字符串的一部分。
- close() :关闭流,释放资源。 【这个还是抽象的,写出来是说明有这个关闭功能】
flush():刷新输出流,把数据马上写到输出流中。 【这个还是抽象的,写出来是说明有这个关闭功能】
- OutputStreamWriter可以使我们直接往流中写字符串数据,它里面会帮我们根据字符编码方式来把字符数据转成字节数据再写给输出流,它相当于一个中介\桥梁。
- FileWriter与OutputStreamWriter功能类似,我们可以直接往流中写字符串数据,FileWriter内部会根据字符编码方式来把字符数据转成字节数据再写给输出流。
- BufferedWriter比FileWriter还高级一点,它利用了缓冲区来提高写的效率。它还多出了一个函数:
- newLine() :写入一个换行符。
附代码:
package fileTest;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;import org.apache.http.impl.conn.Wire;import sun.nio.cs.UnicodeEncoder;
//读取文件内容
public class TestFile {public static void main(String[] args) {try {readFromFileByByte();}catch (FileNotFoundException e) {e.printStackTrace();System.out.println("找不到文件");}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("读取不成功");}try {readFromFileByteTwo();}catch (FileNotFoundException e) {e.printStackTrace();System.out.println("找不到文件");}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("读取不成功");}
// try {
// readFromFileChar();
// }
// catch (FileNotFoundException e) {
// e.printStackTrace();
// System.out.println("找不到文件");
// }
// catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// System.out.println("读取不成功");
// }
// try {
// writeFromFileChar();
// System.out.println("写入成功");
// }
// catch (FileNotFoundException e) {
// e.printStackTrace();
// System.out.println("找不到文件");
// }
// catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// System.out.println("读取不成功");
// }}//读取字节流InputStream :方法一public static void readFromFileByByte() throws IOException{File file = new File("d:"+File.separator+"abc.txt");if(!file.exists()){file.createNewFile();}InputStream inputStream = new FileInputStream(file);byte[] bs = new byte[1024];int len =inputStream.read(bs);inputStream.close();System.out.print("字节流一:");System.out.println(new String(bs));}//读取字节流 InputStream :方法二public static void readFromFileByteTwo() throws IOException{File file = new File("d:"+File.separator+"abc.txt");if(!file.exists()){file.createNewFile();}InputStream inputStream = new FileInputStream(file);byte[] bs = new byte[(int)file.length()];inputStream.read(bs);System.out.print("字节流二:");inputStream.close();System.out.println(new String(bs));}//读取字符流Reader InputStreamReaderpublic static void readFromFileChar() throws IOException{File file = new File("d:"+File.separator+"abc.txt");if(!file.exists()){file.createNewFile();}Reader reader = new FileReader(file);BufferedReader bre = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));String str="";while((str=bre.readLine())!=null){System.out.println(str);
}bre.close();reader.close();}//写字符流write ,bufferedWriter,FileWriterpublic static void writeFromFileChar() throws IOException{FileWriter fileWriter = new FileWriter("d:"+File.separator+"abc.txt",true);//第二个参数表示是追加的BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);bufferedWriter.write("我是追加的字符串");bufferedWriter.close();fileWriter.close();}
}
文件读取和写入(字节流和字符流)相关推荐
- java读取二进制流文件_java分别通过字节流、字符流、二进制读取文件的代码
将做工程过程中比较好的一些内容段做个备份,下面的资料是关于 java分别通过字节流.字符流.二进制读取文件的内容,应该是对小伙伴们有些用途. public class Start { public s ...
- 从字节流到字符流之Java文件读写
前言 Java文件读写可以分为字节流和字符流,之前一直没有好好归纳以下,借此机会做一个小笔记. 目录 字节流 字节流就是一个字节一个字节的传输,最常用的就是FileInputStream和FileOu ...
- 字节流与字符流(一)
一标题:字节输出流:OutputStream 知识点: File类虽然可以操作文件,但是不支持操作文件内容,如果要对内容进行操作只有两种方式:字符流和字节流. 具体内容: 如果要进行输入,输出操作一般 ...
- java中I/O流之字节流和字符流学习总结
一.基本内容 如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种: 字节流:InputStream(字节输入流).OutputStream(字节输出流): 字符流:Reader( ...
- 字节与字符,字节流与字符流
字节(byte) 一个字节是8位(bit),一个位代表0/1.即二进制 1KB=1024byte 1MB=1024*1024byte ASCII码 字母占1字节,汉字占2字节,一个二进制数字是0-2 ...
- (字节流与字符流)InputStream字节输入流
与OutputStream类对应的是资杰输入流,InputStream主要是实现的就是字节数组读取. public abstract class InputStream extends Object ...
- 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- 使用字节流和字符流对文件进行操作
本文比较详细的记录了使用使用字节流和字符流对文件进行写入,读取,复制的操作 1.字节流 package com.yzy.io;import java.io.File; import java.io.F ...
- 字节流与字符流的详解,文件流,数据流
首先看一下File类的常用方法 •File类的对象不但可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录: •当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作 ...
最新文章
- zabbix企业应用之固定端口监控redis
- 解决Android emulator PANIC: Missing emulator engine program for ‘x86‘ CPU.
- iOS开发 贝塞尔曲线UIBezierPath(后记)
- 利用MAVEN打包时,如何包含更多的资源文件
- 笔记本能连上WIFI网络,但是无法上网怎么办
- C语言之预处理探究(二):条件编译(Condition Compile)
- Linux系统下select的使用方式
- dev项目属性按钮是灰色_【网页特效】11 个文本输入和 6 个按钮操作 特效库
- 栈的基本操作(详细)
- excel打印时显示服务器脱机怎么办,excle正在访问打印机!连接局域网打印机在excel中预览,excel自动就关闭是怎么回事...
- HTML怎么画圆角平行四边形,圆角平行四边形钻搅机的制作方法
- 2021-2027全球与中国核磁共振管市场现状及未来发展趋势
- HTML绘制太极八卦图
- easypoi 语法_【英语语法】一般过去时(附视频讲解)
- 微信小程序开发一个多少钱
- [转载] Flex 4 皮肤功能介绍
- Eclipse配置Python的IDE
- TCP与Web服务器
- C程序设计(第五版) 第四章选择结构程序设计(二)
- FutureCompletableFuture