zoukankan      html  css  js  c++  java
  • Java使用IO流对同一个文件进行读写操作

    使用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();
              }
          }
      }

    }

     

     

    记得快乐
  • 相关阅读:
    MySQL 一次非常有意思的SQL优化经历:从30248.271s到0.001s
    Oracle 11g 自动收集统计信息
    C# 获取当前方法的名称空间、类名和方法名称
    C# 数值的隐式转换
    C# using 三种使用方式
    C#、Unity 数据类型的默认值
    Unity for VsCode
    C# Lambda
    git push以后GitHub上文件夹灰色 不可点击
    C#保留小数
  • 原文地址:https://www.cnblogs.com/Y-wee/p/13413943.html
Copyright © 2011-2022 走看看