Java 超详细讲解IO操作字节流与字符流
作者:桃花键神 时间:2022-04-28 20:09:57
IO操作
字节流
java.io.InputStream 输入流,主要是用来读取文件内容的。
java.io.OutputStream 输出流,主要是用来将内容字节写入文件的。
FileInputStream
该流用于从文件读取数据,它的对象可以用关键字 new 来创建。
有多种构造方法可用来创建对象。
可以使用字符串类型的文件名来创建一个输入流对象来读取文件
InputStream f = new FileInputStream("D:/hello");
也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:
File f = new File("D:/hello");
InputStream in = new FileInputStream(f);
FileOutputStream
该类用来创建一个文件并向文件中写数据。
如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
OutputStream f = new FileOutputStream("D:/hello");
也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
File f = new File("D:/hello");
OutputStream fOut = new FileOutputStream(f);
字节流读写案例
读取D:/hello.txt文件中的内容再输入到文件D:/test.txt中
public class Mk {
public static void main(String[] args) throws IOException {
File file=new File("D://hello.txt");
File file1= new File("D://test.txt");
InputStream is=new FileInputStream(file);
OutputStream out=new FileOutputStream(file1);
//定义byte数组用来暂存数据
byte[] buf = new byte[1024];
//读取Is中的内容存到buf
is.read(buf);
//将buf中的内容写入out
out.write(buf);
is.close();
out.close();
}
}
字符流
FileReader
写入文件实例
public class A {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("user.txt", true);
fw.write("你好中国1");
fw.write("你好中国2");
fw.write("你好中国3");
fw.close();
}
}
FileWriter
读取文件实例
这里我把内容换行了
br.ready()是判断这一行流是否为空
br.readLine()是输出一行,然后自动光标指到下一行。
public class A {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("user.txt"));
while (br.ready()) {
System.out.println(br.readLine());
}
br.close();
}
}
字节流与字符流的区别
字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容
那开发中究竟用字节流好还是用字符流好呢?
在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。 如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。
来源:https://jianshen.blog.csdn.net/article/details/123617806
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Mybatis逆向工程运行代码实例
![](https://img.aspxhome.com/file/2023/4/62144_0s.png)
IDEA2020.1常用配置说明
![](https://img.aspxhome.com/file/2023/9/69679_0s.png)
java 安全 ysoserial CommonsCollections6 分析
![](https://img.aspxhome.com/file/2023/3/63083_0s.png)
Java实现布隆过滤器的方法步骤
![](https://img.aspxhome.com/file/2023/4/61264_0s.jpg)
Mybatis插件之自动生成不使用默认的驼峰式操作
Java内存模型(JMM)及happens-before原理
![](https://img.aspxhome.com/file/2023/2/59972_0s.png)
利用java制作简单的音乐播放器
Spring Boot 2结合Spring security + JWT实现微信小程序登录
Java面试题-实现复杂链表的复制代码分享
springboot整合shiro与自定义过滤器的全过程
Java核心编程之文件随机读写类RandomAccessFile详解
Struts 2中实现Ajax的三种方式
![](https://img.aspxhome.com/file/2023/7/65307_0s.jpg)
C#实现将Email地址转成图片显示的方法
C# 设计模式系列教程-外观模式
![](https://img.aspxhome.com/file/2023/8/74818_0s.png)
JDBC连接MySQL并实现模糊查询
springboot2.x整合tkmapper的示例代码
Java使用通配符实现增强泛型详解
![](https://img.aspxhome.com/file/2023/2/60282_0s.png)
Java结构型设计模式中建造者模式示例详解
![](https://img.aspxhome.com/file/2023/6/60286_0s.png)
Spring的自动装配Bean的三种方式
在SpringBoot中整合使用Netty框架的详细教程
![](https://img.aspxhome.com/file/2023/8/72578_0s.png)