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
猜你喜欢
- @Autowired注解注入的xxxMapper报错项目场景Mybatis-Plus测试问题描述在Mybatis-Plus场景的测试中发现,
- 简介Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特
- 使用POI读写Word doc文件 Apache poi的hwpf模
- json格式的字符串与对象的互相转换Jackson 简介Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转
- 使用的是idea+restful风格第一:引入依赖为:<!--poi--> <dependenc
- 什么是枚举?枚举是JDK5引入的新特性。在某些情况下,一个类的对象是固定的,就可以定义为枚举。在实际使用中,枚举类型也可以作为一种规范,保障
- 1.配置代理系统管理---configure Global Security(全局安全设置)---Tcp port for inbound
- 要求: * 判断用户输入的年份是平年还是闰年实现代码:import java.util.Scanner;/** * 要
- 问题描述 idea启动tomcat后乱码了,并且,idea的各种编码都是设置的为UTF-8,但是中文就是乱码了。解决方法 进入idea的安装
- springBoot项目启动多个实例今天碰到一个需求是,将一个服务提供者启动两个实例,一个实例对外,一个实例对内,对内价格有折扣,两个实例通
- 前言之前在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务
- 0-1背包的问题背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重
- 单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源代码例子:public class SingleThread {int num
- 本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下:Java中的SoftReferen
- 在基于UI元素的自动化测试中, 无论是桌面的UI自动化测试,还是Web的UI自动化测试. 首先我们需要查找和识别UI
- 为什么要使用路由在之前我们的代码中,页面跳转使用的代码如下所示:Navigator.of(context).push( Mate
- 目录写在前面引入guava依赖包怎么做变量转换写在前面有时候需要处理对象属性的getter、setter方法,或者将属性与数据表字段进行相互
- static关键字static关键词与对象无关。static关键字主要修饰四个部分的内容这里我们主要介绍static修饰属性和修饰方法。1.
- 批量添加一对多中间表建立中间表A,一个id对应多个lid;传入两条参数long id;//单个数值List lid;//集合数值dao层语句
- 一、引言之前小编讲了MP从入门到核心功能的使用,接下来这几天小编会把MP在实际项目中,一些常用的高级功能给记录一下。高级功能分为:逻辑删除、