JavaEE传送门

JavaEE

JavaEE——认识文件

JavaEE——File类


目录

  • 文件内容的读写 —— 数据流
    • 字节流
      • InputStream
      • OutputStream
    • 字符流
      • Reader
      • Writer
      • Scanner
      • PrintWriter

文件内容的读写 —— 数据流

把读写文件的操作, 比喻成 "水流". (水的特点, 流动起来, 绵延不断)

比如: 我们想接 100ml 的水, 有好几种接法

  1. 一次接 1ml, 分 100 次接完
  2. 一次接 10ml, 分 10 次接完
  3. 一次接 50ml, 分 2 次接完

我们读写文件也是一样, 我们想写 100 字节的数据到文件中, 我们可以

  1. 一次写 1 字节, 分 100 次写
  2. 一次写 10 字节, 分 10 次写
  3. 一次写 50 字节, 分 2 次写

Java 标准库, 就在 " 流" 的概念上, 提供了一组类, 完成读写文件的操作. 分为

字节流 (以字节为基本单位), 适用于二进制文件

字符流 (以字符为基本单位), 适用于文本文件


字节流

InputStream

方法

修饰符及返回值类型 方法签名 说明
int read() 读取一个字节的数据 (返回 -1 代表已经完全读完了)
int read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量 (-1 代表以及读完了)
int read(byte[] b, int off, int len) 最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量 (-1 代表以及读完了)
void close() 关闭字节流

read() 方法, 用来读数据, 把数据从硬盘中读到内存中

FileInputStream 构造方法

签名 说明
FileInputStream(File file) 利用 File 构造文件输入流
FileInputStream(String name) 利用文件路径构造文件输入流

示例

  • 打开文件
//相当于打开文件
InputStream inputStream = new FileInputStream("./heihei.txt");

# 注意 # 打开了文件, 进行操作后, 一定要记得关闭文件 ! !

//关闭文件
inputStream.close();
  • 读文件 read()
while(true) {int b = inputStream.read();// 返回 -1 表示读完了if (b == -1) {break;}System.out.println(b);
}

  • 完整代码
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;public class Test {public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("./heihei.txt");while(true) {int b = inputStream.read();if (b == -1) {break;}System.out.println(b);}inputStream.close();}
}

我们打开看一下 heihei.txt, 然后看一下运行结果

# 注意事项 #

进行文件操作的时候, 一定要记得进行 close ! !

每个进程都对应着 PCB (可能是多个), PCB 里面有一个字段, 文件描述表. (同一个进程里多个 PCB 公共使用同一份文件描述表的)

文件描述表相当于是一个数组/ 顺序表.

进程每次打开一个文件, 都会在这个表里, 创建一个项, 这个项就表示一个文件.

如果关闭一个文件, 就会把表里的对应项给释放掉. 如果不关闭, 意味着这个表项就在这里占着位置.

如果持续打开文件, 而且从来不关, 此时表项就会被耗尽, 导致后续再打开文件, 就会打开失败.

就会造成文件资源泄露, 这是一个非常严重的问题 ! !


OutputStream

方法

修饰符及返回值类型 方法签名 说明
void write(int b) 写入要给字节的数据
void write(byte[] b) 将 b 这个字符数组中的数据全部写入 os 中
int write(byte[] b, int off, int len) 将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
void close() 关闭字节流

示例

public class Test {public static void main(String[] args) throws IOException {//只要打开文件成功, 就会把文件原有内容清空//OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。OutputStream outputStream = new FileOutputStream("./heihei.txt");outputStream.write(97);//aoutputStream.write(98);outputStream.write(99);//一定记得关闭outputStream.close();}
}

运行结果展示


字符流

Reader

方法

示例

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Test {public static void main(String[] args) throws IOException {Reader reader = new FileReader("./heihei.txt");while (true) {int ret = reader.read();if(ret == -1) {break;}System.out.println((char)ret);}reader.close();}
}

heihei.txt 与 运行结果展示


Writer

方法

示例

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Test {public static void main(String[] args) throws IOException {Writer writer = new FileWriter("./heihei.txt");writer.write("hello world");writer.close();}
}

运行结果展示


Scanner

针对文本文件, 使用字符流的时候, 还可以使用 Scanner 来进行读取

示例

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;public class Test {public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("./heihei.txt");// 从inputStream读取Scanner scanner = new Scanner(inputStream);//hasNext遇到空白符结束while (scanner.hasNext()) {System.out.println(scanner.next());}inputStream.close();}
}

heihei.txt 与 运行结果展示

# 注意 #

InputStream 是字节流. Scanner 是在 InputStream 的基础上, 包装出来了个字符流.


PrintWriter

PrintWriter 类中提供了我们熟悉的 print/println/printf 方法

示例

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;public class Test {public static void main(String[] args) throws IOException {OutputStream outputStream = null;try {outputStream = new FileOutputStream("./heihei.txt");PrintWriter printWriter = new PrintWriter(outputStream);printWriter.println();printWriter.printf("a = %d", 10);//刷新缓冲区printWriter.flush();} finally {//保证文件一定能关闭防止资源泄露outputStream.close();}}

运行结果展示

# 注意 #

一定不要忘记调用flush

缓冲区其实就是一个 “内存空间”.

文件是在硬盘上的, 写文件操作, 就是在写硬盘, 但是写硬盘是一个低效操作 ! !

缓冲区满了会自动把内存缓冲区的数据写到硬盘中.

若缓冲区未满, 我们就需要调用 flush 手动刷新.

除了try finally 保证 close 还可以使用 try with resources.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;public class Demo5 {public static void main(String[] args) throws IOException {//把要关闭的对象写在 try() 中, 当try结束, 就会自动调用到对应对象的 close 方法//且支持一个 () 放对各对象, 多个对象的创建之间使用; 分割try (OutputStream outputStream = new FileOutputStream("./heihei.txt")){PrintWriter printWriter = new PrintWriter(outputStream);printWriter.println();printWriter.printf("a = %d", 10);//刷新缓冲区printWriter.flush();}}
}

JavaEE——文件内容的读写相关推荐

  1. 【Java 编程】文件操作,文件内容的读写—数据流

    一.认识文件 1.什么是文件 平时说的文件一般都是指存储在硬盘上的普通文件 形如 txt, jpg, mp4, rar 等这些文件都可以认为是普通文件,它们都是在硬盘上存储的 在计算机中,文件可能是一 ...

  2. 【文件操作(IO)】File类的属性,常见方法,文件内容的读写操作

    文章目录 1. 认识文件 2. Java中操作文件 2.1 File类 2.2 文件内容的读写--数据流 InputStream类 利用Scanner进行字符读取 OutputStream类 利用Pr ...

  3. python读压缩文件内容_Python读写压缩文件的方法

    问题 你想读写一个gzip或bz2格式的压缩文件. 解决方案 gzip 和bz2模块可以很容易的处理这些文件. 两个模块都为 open()函数提供了另外的实现来解决这个问题. 比如,为了以文本形式读取 ...

  4. android 读取文件内容,Android读写文件 获取文件并读取写入数据

    一.       从 resource 中的 raw 文件夹中获取文件并读取数据(资源文件只能读不能写) String res = ""; try{ InputStream in ...

  5. c语言 如何创建txt文件,C++文本文件读写操作详解

    前面章节中,已经给大家介绍了文件流对象如何调用 open() 方法打开文件,并且在读写(又称 I/O )文件操作结束后,应调用 close() 方法关闭先前打开的文件.那么,如何实现对文件内容的读写呢 ...

  6. python调用什么函数实现对文件内容的读取_如何使用python语言中的方法对文件进行读写操作...

    在我们使用python语言中的文件时,可以使用open()方法打开文件,close()方法关闭文件,read()方法读取文件内容,write()方法写入内容到文件中.下面利用几个实例说明文件读写方法, ...

  7. cfile清空文件内容_体育老师学编程(第11天)python常用的文件读写操作

    学习内容:python文件处理 一.什么是文件: 前边学习了计算机的存储设备分为内存和硬盘两种,内存容量小,断电就丢失,我们若想长期存储一段内容,就需要存到硬盘中,那么存入的方式就是以文件形式存入的. ...

  8. python文件内容写入的方法有哪些、对应的方法和含义_Python的文件读写及目录操作...

    文件操作 一.Open创建文件读写 file = open(filename[,mode,encoding]) mode: "r" |"w" "a&q ...

  9. C语言---14文件操作---01文件内容的顺序读写

    文中的源码都在这里哦!!! 文中的源码都在这里哦!!! 一.文件的基本概念 一个文件通常是磁盘上一段命名的存储区 磁盘文件(通常用的文件):指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使 ...

最新文章

  1. 米的换算单位和公式_求小学数学的公式、换算和单位转英文字母(米cm)
  2. img、列表和table标签
  3. asp.net 递归删除文件夹及其子文件夹和所有文件[转]
  4. mysql分组查询后插入新表,MySQL获取分组后的TOP 1和TOP N记录
  5. SAP License:全球十大主流ERP厂商,看看你是不是在用
  6. 【报告分享】2020年中国数据驱动型企业成长路径研究报告.pdf(附下载链接)...
  7. cmd 文本文件分割_cmd - 分割大文件
  8. 账龄分析表excel模板_这种高端表格模板你会做吗?Excel制作带照片的员工信息查询表...
  9. 阿里代码规范检查自定义规则扩展
  10. 专访Token经济设计专家叶开:Token设计画布与10大设计模式
  11. 开源、电信与多云,VMware强势崛起新时代
  12. redis 返回 key 的剩余的过期时间(RedisTemplate封装PTTL 命令)
  13. Cadence 原理图操作记录
  14. Android开发获取连接的WIFI名称
  15. Python求风向xy向量
  16. 电子警察位置【收藏】
  17. 基于STM32F103芯片实现LED灯闪烁
  18. Unity3D合成大西瓜
  19. CTFShow-MISC入门篇详细wp(1-56)
  20. KubeCon Keynote演讲:Kubernetes如何赋能可再生能源产业提升10倍效率

热门文章

  1. springboot入门项目-上传头像
  2. 修改搜狗输入法的软键盘快捷键
  3. $.ajax的async参数,jquery的$.ajax async使用详解
  4. 【Data augmentation in NLP】——1
  5. 不建议学python-IT业界:为什么我不建议你学python?
  6. 【JAVA基础】重新系统学习Java(七)常用API(String、ArrayList)
  7. 当知乎跳起科技华尔兹
  8. oracle建表语句空间,oracle建表空间语句
  9. 海绵宝宝买饮料(二分法)
  10. Win7 在C盘上复制粘贴文件的时候,提示错误0x80070522:客户端没有所需的特权