JAVA IO流之简单的文件读取读
时间:2019-04-20
本文章向大家介绍JAVA IO流之简单的文件读取读,主要包括JAVA IO流之简单的文件读取读使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
IO流读取文件
前言:首先简单介绍一下,IO流根据读取流向分类可以分为输入流和输出流。
根据数据特点分类可以分为字节流和字符流,字节流是万能的,可以读取任何形式的文件。下文围绕字节流展开介绍,字符流其实也是一样的,就不做赘述了。
1.文件流
public static void main(String[] args) throws IOException {
//创建输入流对象并关联a.txt文件,从a.txt文件读取内容
FileInputStream fis = new FileInputStream(new File("a.txt"));
//创建输出流对象并关联b.txt文件,将读取到的内容不断的写入到b.txt文件中,如果b.txt文件不存在 则会创建该文件
FileOutputStream fos = new FileOutputStream("b.txt");
int len;
while ((len = fis.read()) != -1) { //一个字节一个字节的读取a.txt文件的内容
fos.write(len); //一个字节一个字节的将读到的内容写入到b.txt文件
}
//关闭流,释放资源
fis.close();
fos.close();
}
FileInputStream 是InputStream抽象类的子类
FileOutputStream 是OutputStream抽象类的子类
2.缓冲流
public static void main(String[] args) throws IOException {
//创建输入流对象并关联a.txt文件,从a.txt文件读取内容
FileInputStream fis = new FileInputStream(new File("a.txt"));
//创建输出流对象并关联b.txt文件,将读取到的内容不断的写入到b.txt文件中,如果b.txt文件不存在 则会创建该文件
FileOutputStream fos = new FileOutputStream("b.txt");
byte[] bf = new byte[1024 * 8]; //创建一个bf数组缓冲区
int len;
while ((len = fis.read(bf)) != -1) { //将a.txt的文件内容读取到bf数组中
fos.write(bf, 0, len); //从bf数组中将内容写到b.txt文件中
}
//关闭流,释放资源
fis.close();
fos.close();
}
第二种方式和第一种方式相比,为什么要快呢?
因为第一种方式是每次从硬盘上一个字节一个字节的读取文件数据到内存中,然后再将读取的内容写入到硬盘上,如此一来,程序和硬盘打交道的次数就非常多!
而第二种方式,每次从硬盘上读取bf数组大小个字节到内存,这样就极大减少了程序和硬盘打交道的次数!
要知道,基于内存的操作速度是远远大于基于硬盘的操作速度的,不然为什么内存比硬盘贵那么多呢?!
当然,我们完全可以不用自己定义缓冲数组来进行文件的读写操作,java已经为我们写好了相应的包装类:
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("a.txt")));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("b.txt")));
int len;
while ((len = bis.read()) != -1) {
bos.write(len);
}
bis.close();
bos.close();
}
这种方式其实和第二种方式是一样的,BufferedInputStream 对FileInputStream进行了包装,其源码实现里定义了一个大小为8192的字节数组。BufferedOutputStream 亦是同理~
好了,简单的文件读写操作就先介绍到这里啦~
- CSS魔法堂:选择器及其优先级
- 常见的Web实时消息交互方式和SignalR
- 【设计模式】——工厂方法FactoryMethod
- 前端翻译:Activating Browser Modes with Doctype
- JS魔法堂:doctype我们应该了解的基础知识
- CentOS6.5菜鸟之旅:安装Realtek无线网卡驱动
- CentOS6.5菜鸟之旅:U盘安装CentOS64位
- 人工智能创造新型态工作 制造业受冲击
- ASP.NET Core File Providers
- JS魔法堂之实战:纯前端的图片预览
- 域名publica.com近50万交易 买家身份浮出水面
- Vim杂记:Sublime的配色方案
- Vim杂记:markdown插件
- 【手把手教你全文检索】Apache Lucene初探
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux系统查看CPU、机器型号、内存等信息
- 实战基本的Linux sed命令示例代码
- 在Linux中如何查看可用的网络接口详解
- Linux程序运行时加载动态库失败的解决方法
- Linux/CentOS系统同步网络时间的2种方法详解
- Linux 常用命令之Linux more命令使用方法
- Ubuntu下VIM配置成C++开发编辑器
- Ubuntu环境下使用G++编译CPP文件
- Linux下Tomcat的几种运行方式讲解
- linux中chmod命令用法详解
- Linux强制释放占用端口以及Linux防火墙端口开放方法详解
- CentOS7.5从零安装Python3.6.6的教程详解
- 实现一台或者多台Linux实例解绑SSH密钥对
- centos7切换启动内核与切换启动模式的讲解
- Ubuntu下Sublime Text无法输入中文最简单的解决方案