Java如何基于IO流实现同一文件读写操作

1、注意事项

众所周知,对一个文件进行读写操作时,我们需要创建对应的输入流和输出流

但需要注意的是,读写操作不能同时进行(边读边写),即不能同时打开输入流和输出流,直白一点说就是不能同时对同一个文件的输入流和输出流进行赋值,否则影响文件进行正常的读写操作。如果是不同的文件,则可以边读边写。

2、那么我们怎么对同一个文件进行读写操作呢?

不能边读边写,但是可以先读后写,先写后读。

a、先读后写

打开输入流,对文件进行读操作,操作完成之后把输入流关掉(注意一定要关掉)。然后再打开输出流,对文件进行写操作,操作完成之后再把输出流关掉。

b、先写后读

原理同上

3、案例(代码)

package com.yl.homework.io;
​
import java.io.*;
import java.util.ArrayList;
​
/**
 * (字符流)读取一个文本文件,每行都追加一个“好”,在文件结尾再追加“完毕”。
 */
public class Test3 {
​
  public static void main(String[] args) {
    //文件对象
    File file=new File("H:\\ioText\\homework.txt");
    //字符缓冲流
    BufferedReader bufferedReader=null;
    BufferedWriter bufferedWriter=null;
    //存储读取的内容
    ArrayList<String> arrayList=new ArrayList<>();
    try {
      //打开输入流
      bufferedReader=new BufferedReader(new FileReader(file));
      //存储读取内容
      String content="";
      //读取数据
      while ((content=bufferedReader.readLine())!=null){
        System.out.println(content);
        //每行都追加一个“好”
        content+="好";
        //把内容存入arrayList
        arrayList.add(content);
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      //关闭流
      try {
        bufferedReader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    try {
      //打开输出流
      bufferedWriter=new BufferedWriter(new FileWriter(file));
      //遍历arrayList
      for (int i=0;i<arrayList.size();i++){
        //判断是不是最后一行
        if (i==arrayList.size()-1){
          //写数据
          bufferedWriter.write(arrayList.get(i));
          //刷新
          bufferedWriter.flush();
        }else{
          //写数据
          bufferedWriter.write(arrayList.get(i));
          //换行
          bufferedWriter.newLine();
          //刷新
          bufferedWriter.flush();
        }
      }
      //在文件结尾再追加“完毕”
      bufferedWriter.write("完毕");
      //刷新文件
      bufferedWriter.flush();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      try {
        //关闭流
        bufferedWriter.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈java IO流——四大抽象类

    IO所谓的四大抽象类就是: InputStream.OutputStream.Reader.Writer InputStream:字节输入流的父类,数据单位为字节. 常用方法: int read();    从输入流中读取下一个字节 void close();   关闭流  OutputStream:字节输出流的父类,数据单位为字节. 常用方法: void write(int b);  将一个integer数组长度写入此流  void flush();   刷新此流  void close();

  • java IO流将一个文件拆分为多个子文件代码示例

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位,对文件进行分割或合并. 看下基本思路: 如果有一个大文件,指定分割大小后(比如:按1M切割) step 1: 先根据原始文件大小.分割大小,算出最终分割的小文件数N step 2: 在磁盘上创建这N个小文件 step 3: 开多个线程(线程数=分割文件数),每个线程里,利用RandomAccessF

  • Java IO流和文件操作实现过程解析

    Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 控制台输入 BufferedReader br = new BufferedReader(new InputStreamReader(Syste

  • java IO数据操作流、对象序列化、压缩流代码解析

    数据操作流 在io包中,提供了两个与平台无关的数据操作流: 数据输入流(DataInputStream) 数据输出流(DataOutputStream) 通常数据输出流会按一定格式将数据输出,再通过数据输入流按照一定格式将数据读入 DataOutputStream接口定义了一系列的writeXxx()的操作,可以写入各种数据类型的数据. 范例:使用数据操作流写入与读出数据 import java.io.DataOutputStream ; import java.io.File ; import

  • 详解Java中IO字节流基本操作(复制文件)并测试性能

    此次案例将以复制文件的形式来演示IO字节流的基本操作,复制一个mp3文件,文件信息如下图: main方法测试 public static void main(String[] args) throws Exception { //源文件 String srcFile = "src/a.mp3"; //目的文件 String destFile = "src/b.mp3"; long start = System.currentTimeMillis(); ... 复制文

  • Java中io流解析及代码实例

    IO流 Java中IO流分为两种,字节流和字符流,顾名思义字节流就是按照字节来读取和写入的,字符刘是按照字符来存取的:常用的文件读取用的就是字符流,在网络通信里面用的就是字节流 下面这张图是Java中IO流的总体框架: 字节流 Java中字节流一般都是以stream结尾的,输入的字节流叫InputStream,输出字节流叫OutputStream;InputStream和OutputStream是表示自己输入/输出的所有类的超类,是抽象类(abstract) 常用的字节流有: 1.FileInp

  • Java IO流之字符缓冲流实例详解

    字符流: 1.加入字符缓存流,增强读取功能(readLine) 2.更高效的读取数据 BufferedReader 从字符输入流读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取. FileReader:内部使用InputStreamReader,解码过程,byte->char,默认缓存大小为8k BufferReader:默认缓存大小为8k,但可以手动指定缓存大小,把数据读取到缓存中,减少每次转换过程,效率更高 /字符输入缓冲流 private static void charReade

  • java关闭流连接IO工具类

    本文实例为大家分享了java关闭流连接IO工具类的具体代码,供大家参考,具体内容如下 package com.demo.utils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; /** * 关闭流连接IO工具类 * @author dongyangyang * @Date 2016

  • Java如何基于IO流实现同一文件读写操作

    1.注意事项 众所周知,对一个文件进行读写操作时,我们需要创建对应的输入流和输出流 但需要注意的是,读写操作不能同时进行(边读边写),即不能同时打开输入流和输出流,直白一点说就是不能同时对同一个文件的输入流和输出流进行赋值,否则影响文件进行正常的读写操作.如果是不同的文件,则可以边读边写. 2.那么我们怎么对同一个文件进行读写操作呢? 不能边读边写,但是可以先读后写,先写后读. a.先读后写 打开输入流,对文件进行读操作,操作完成之后把输入流关掉(注意一定要关掉).然后再打开输出流,对文件进行写

  • Java详解IO流创建读取与写入操作

    目录 概念 io流对应的方法 一.File方法(创建文件) 二.FileInputStream(获取字节方法)输入流 三.FileOutputStream(写入字节方法)输出流 总结 概念 IO流可以初步的理解为数据间的传输,我们将一组数据入:1234567,将他们从hello文件中转入haha文件中,使用程序的方法进行转入的话则需要一个一个的传入,即为一个字节一个字节的传输,我们每次只能传入或读取一个字节,这就是io流的大致流程,io流对任何类型的文件都可以进行读取.如:文本文件,图片,歌曲m

  • Java详细讲解IO流的Writer与Reader操作

    目录 接口连接 一.Writer方法 二.Reader方法 接口连接 public static void main(String[] args) throws Exception io流的所有方法都需要链接他们的接口父类,Exception. 一.Writer方法 方法引入: Writer Writer = new FileWriter("D:\\java制作\\高级特性\\src\\com\\ytzl\\第二章\\demo4\\io流\\two\\FileWriter方法.txt"

  • Java基于IO流读取文件的方法

    本文实例讲述了Java基于IO流读取文件的方法.分享给大家供大家参考,具体如下: public static void readFile(){ String pathString = TEST.class.getResource("/simu").getFile(); try { pathString = URLDecoder.decode(pathString, "utf-8"); } catch (UnsupportedEncodingException e1)

  • Java 使用IO流实现大文件的分割与合并实例详解

    Java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分开复制, 最后把三个文件合并, 这样就解决问题了 :再比如说, 你有一个上百M的文件要上传到FTP ,但是这个FTP限制你单个文件不能超过10M 这时候也可以用文件分割的办法解决问题.既然分割了,那么在我们再次使用的时候就需要合并了,今天我们就通过Java

  • Java全面解析IO流相关知识

    目录 前言 一.File 1.File类的概述和构造方法 2.File类创建功能 3.File类判断和获取功能 4.File类删除功能 二.字节流 1.IO流的概述和分类 2.字节流写数据 3.字节流写数据的两个小问题 字节流写数据如何换行 字节流写数据如何实现追加写入 4.字节流写入数据假异常处理 5.字节流读数据(重点) 6.字节缓冲流 7.如何选择怎样得数据读取呢? 三.字符流 1.为什么会出现字符流? 2.字符串中的编码解码问题 3.如何实现解决编译解码的问题 4.字符流写数据的方法 5

  • java中的IO流

    目录 java中的IO流 1.普通字节流 2.字节缓冲流 3.转换流 4.常用的IO类FileReader和BufferedReader 5.总结 java中的IO流 前言: 在java中IO类很庞大,初学的时候觉得傻傻分不清楚.其实java流归根结底的原理是普通字节流,字节缓冲流,转换流.最基础的是普通字节流,即从硬盘读取字节写入到内存中,但在实际使用中又发现一些特殊的需求,所以java语言的设计者这引入了字节缓冲流和转换流.所有的java IO类对IO的处理都是基于这三种流中的一种或多种:在

  • 关于Java中的IO流总结(推荐)

    1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream.以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter. 3. 转换流InputStreamReader和OutputStreamWriter 一:流的继承关系 字节流 字符流 字符流和字节

  • 新手小白看过来学JAVA必过IO流File字节流字符流

    目录 IO简介 1.流Stream 2.IO流的继承结构 3 File文件类 3.1概述 3.2创建对象 3.3常用方法 3.4 练习:测试常用方法 4.字节流读取 4.1 InputStream抽象类 4.2 FileInputStream子类 4.3 BufferedInputStream子类 4.4 练习:字节流读取案例 5.字符流读取 5.1 Reader抽象类 5.2 FileReader子类 5.3 BufferedReader子类 5.4 练习:字符流读取案例 6.字节流写出 6.

  • Java细数IO流底层原理到方法使用

    目录 一.什么是IO流 二.常用的文件操作 三.获取文件的相关信息 四.目录的操作和文件删除 五.IO流体系图-常用的类 六.FileInputStream常用方法 七.FileOutputStream常用方法 八.FileReader常用方法 九.FileWriter常用方法 一.什么是IO流 输入流和输出流. 输入流:数据从数据源(文件)到程序(内存)的路径 输出流:数据从程序(内存)到数据源(文件)的路径 二.常用的文件操作 学习目标:创建文件对象相关构造器和方法 new File(Str

随机推荐