博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I/O流的文件输入输出四部曲
阅读量:6152 次
发布时间:2019-06-21

本文共 2373 字,大约阅读时间需要 7 分钟。

第一部曲——多个字节读取到缓存


步骤1:创建文件输入流和输出流对象

  方式1:先创建要读取文件,把文件的路径和文件名当做参数传递进去。而后再创建文件输入流对象。该对象会抛出文件未找到异常(FileNotFoundException),需要捕获该异常。

File file = new File("E:/作业/WorkerTest.java");FileInputStream fis = null;try {    fis = new FileInputStream(file);} catch (FileNotFoundException e) {    e.printStackTrace();}

 

   方式2:直接创建文件输入流对象,其参数为new一个文件对象。

FileInputStream fis = null;try {    fis = new FileInputStream(new File("E:/作业/WorkerTest.java"));} catch (FileNotFoundException e) {    e.printStackTrace();}

 

 步骤2:先创建缓存数组byte,如果没有读取到文件最后(即-1),则输出到控制台上

byte[] b = new byte[1024];int length = fis.read(b);while ((length = fis.read(b)) != -1) {    for (int i = 0; i < length; i++) {        System.out.print((char)b[i]);    }}

 

第二部曲——一个字节一个字节读取并写入文件


 

步骤1:创建文件输入流和输出流对象

File inputFile = new File("E:/Excercise01.java");

File outputFile = new File("E:/写入文件.txt");

try {

  fis = new FileInputStream(inputFile); // 创建输入数据流

  fos = new FileOutputStream(outputFile); // 创建输出数据流

} catch (Exception e) {

  e.printStackTrace();
}

 

步骤2:使用FileInputStream.read()方法进行一个字节一个字节读取

int read;while ((read = fis.read()) != -1) {    fos.write(read);}

 

第三部曲——多个字节进行缓存,一次写入


 

  一次读取固定长度的字节数缓存到数组(byte),然后用文件输入流读取byte数组中的字节,如果没有读取到文件末尾,则用文件输入流写入文件。

// 多个字节进行缓存,一次写入
byte[] b = new byte[1024];int length = -1;while ((length = fis.read(b)) != -1) {    for (int i = 0; i < length; i++) {        fos.write(b[i]);    }}

 

第四部曲——一行一行读取


 

  使用BufferedReader读取文件,BufferedWriter写入文件。在catch结尾一定要加上finally,里面要对输入流和输出流进行判断,如果不为空,则关闭输入输出流。否则将会一直占有系统内存。

File inputFile = new File("E:/Excercise01.java");File outputFile = new File("E:/output.txt");BufferedWriter bw = null;BufferedReader br = null;        try {            br = new BufferedReader(new FileReader(inputFile));            bw = new BufferedWriter(new FileWriter(outputFile));            String str = null;while ((str = br.readLine()) != null) {
bw.write(str); // 写入一行数据 bw.newLine(); // 写完一行之后换行 } } catch (IOException e) { e.printStackTrace(); } finally { try {
         // 判断文件输入流是否为空 if (br != null) { br.close(); }
         // 判断文件输出流是否为空
          if (bw != null) {             bw.close();           }         } catch (IOException e) {
           e.printStackTrace();         }     }

 

转载于:https://www.cnblogs.com/snow1234/p/7198791.html

你可能感兴趣的文章
Matlab绘图(一二三维)
查看>>
容易被遗忘的十种健康食物
查看>>
Thinking in life(1)
查看>>
小白书 黑白图像【DFS/Flood Fill】
查看>>
git学习笔记(一)——从已存在的远程仓库克隆
查看>>
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?
查看>>
ACM算法目录
查看>>
数据结构与算法(6)二叉树遍历
查看>>
最近学习了一个手机影音
查看>>
点亮第一个LED灯
查看>>
Quart2D续
查看>>
sort()
查看>>
Google Protocol Buffer 的使用和原理
查看>>
php的cookie配置和session使用
查看>>
分治法——循环左移
查看>>
遍历datatable的方法
查看>>
离散数学:每条边的权重均不相同的带权图有唯一最小生成树
查看>>
玩转 SSH(六):SpringMVC + MyBatis 架构搭建(注解版)
查看>>
json & pickle 模块
查看>>
ios删除uiview上的视图
查看>>