I/O 简单文本文件读写改 对象 ArrayList保存文件的记录

建立一个类TextFile ,继承ArrayList 类

      哪么TextFile 拥有ArrayList public类成员数据和方法。

目的:1、用ArrayList对象保存从文本文件中读出的记录

         2、可以用ArrayList类里面的所有的方法对文件中记录进行修改,删除,非常方便

         3、修改后的文件内容存入另一个文本文件中。

**  对于 一整个大字符串,怎么分成一个个单个值,保存在数组中,我们可以利用正则表达式定分割的标准,

     现在默认是换行\n,或者是可以换成\\W+

     \\W+:表示分割符号可以不是(a--z A--z - 0--9),即分割符只要不含字母,数子,下划线,全部当成分割符号,

              这样分割符号是\n,逗号,空格等等 ,

**类里面的方法里this:编译器默认是ArrayList的 private transient Object[] elementData,

 elementData是private ,建立类TextFile对象时利用父类构造函数赋值elementData。

            for(String item : this)  //默认调用了 ArrayList iterator() 方法。

          out.println(item);

下面的类执行顺序:

        1、读出一个文件,放入到一个StringBuilder 中。

        2、把StringBuilder 中的内容 写入一个文本文件test.txt。

        3、建立类TextFile 的对象,ArrayList父类对象,

             读出test.txt的内容,并以数组得方式保存在ArrayList对象下的类成员elementData 中

         4、这样我们就可以随便用ArrayList类的方法对数据进行操作

         5、修改之后保存在另一个文本文件中。

package net.mindview.util;

import java.io.*;
import java.util.*;


public class TextFile extends ArrayList<String> {
  // Read a file as a single string:
  public static String read(String fileName) {
    StringBuilder sb = new StringBuilder();
    try {
      BufferedReader in= new BufferedReader(new FileReader(new File(fileName).getAbsoluteFile()));
      try {
        String s;
        while((s = in.readLine()) != null) {
          sb.append(s);
          sb.append("\n");
        }
      } finally {
        in.close();
      }
    } catch(IOException e) {
      throw new RuntimeException(e);
    }
    return sb.toString();
  }
  // Write a single file in one method call:
  public static void write(String fileName, String text) {
    try {
      PrintWriter out = new PrintWriter( new File(fileName).getAbsoluteFile());
      try {
        out.print(text);
      } finally {
        out.close();
      }
    } catch(IOException e) {
      throw new RuntimeException(e);
    }
  }
  // Read a file, split by any regular expression:

  public TextFile(String fileName, String splitter) {

    super(Arrays.asList(read(fileName).split(splitter)));
    // Regular expression split() often leaves an empty
    // String at the first position:
    if(get(0).equals("")) remove(0);
  }
  // Normally read by lines:
  public TextFile(String fileName) {
    this(fileName, "\n");
  }
  public void write(String fileName) {
    try {

      PrintWriter out = new PrintWriter(new File(fileName).getAbsoluteFile());
      try {       
        for(String item : this) 
          out.println(item);
      } finally {
        out.close();
      }
    } catch(IOException e) {
      throw new RuntimeException(e);
    }
  }
  // Simple test:
  public static void main(String[] args) {
 //系统默认是当前工程所在目录
    String file = read("src\\net\\mindview\\util\\TextFile.java");
    System.out.println("file:"+file);
    //写到当前工程目录,如果没有文件,则建立。
    write("test.txt", file);
    //从test.txt 读出来,放入数组中
    TextFile text = new TextFile("test.txt");
    //再写入文件2中
    text.write("test2.txt");
  }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值