文件读写的实用工具

来源:互联网 发布:ios软件安装目录 编辑:程序博客网 时间:2024/06/05 06:55
通常,程序的任务就是读取文件到内存,修改,然后再写出。Java I/O 类库的问题之一就
是:它需要我们编写相当多的代码去执行这些常用操作——没有任何帮助类功能可以为我们
做这一切。更糟糕的是,修饰器会使得记住如何打开文件变得相当困难。因此,在我们的类
库中添加帮助类就显得相当有意义,这样就可以很容易地为我们完成这些基本任务。下面这
个程序包含的静态方法可以像简单字符串那样读写文本文件。另外,我们可以创建一个
TextFile 类,它用一个 ArrayList()来持有文件的若干行(如此,当我们操纵文件内容时,
就可以使用 ArrayList 的所有功能)。


//: com:bruceeckel:util:TextFile.java
// Static functions for reading and writing text files as
// a single string, and treating a file as an ArrayList.
// {Clean: test.txt test2.txt}
package com.bruceeckel.util;
import java.io.*;
import java.util.*;


public class TextFile extends ArrayList {
    // Tools to read and write files as single strings:
  public static String
    read(String fileName) throws IOException {
    StringBuffer sb = new StringBuffer();
    BufferedReader in =
            new BufferedReader(new FileReader(fileName));
        String s; 
        while((s = in.readLine()) != null) {
            sb.append(s); 
            sb.append("\n"); 
        } 
    in.close();
    return sb.toString();
    } 
  public static void
    write(String fileName, String text) throws IOException {
    PrintWriter out = new PrintWriter(
      new BufferedWriter(new FileWriter(fileName)));
    out.print(text);
        out.close(); 
    } 
    public TextFile(String fileName) throws IOException {
    super(Arrays.asList(read(fileName).split("\n")));
    } 
    public void write(String fileName) throws IOException {
    PrintWriter out = new PrintWriter(
      new BufferedWriter(new FileWriter(fileName)));
        for(int i = 0; i < size(); i++)
      out.println(get(i));
        out.close(); 
    } 
  // Simple test:
    public static void main(String[] args) throws Exception {
    String file = read("TextFile.java");
    write("test.txt", file);
    TextFile text = new TextFile("test.txt");
    text.write("test2.txt");
    } 
} ///:~


所有的方法都直接将 IOException 传递给调用者。Read()将每行添加到 StringBuffer
(为了更有效)中,并且为每行加上换行符,因为在读的过程中换行符会被去除掉。接着返
回一个包含整个文件的字符串。Write()打开文本并将其写入文件。在这两个方法完成时,
都要记着 close()文件。


这个构造器利用 read()方法将文件转换成字符串,接着使用 String.split()以换行符
为界把结果划分成行(若要频繁使用这个类,我们可以重写此构造器以提高性能)。遗憾的
是没有相应的“join”方法,所以那个非静态的 write()方法必须一行一行地输出这些行。


在 main()方法中,通过执行一个基本测试来确保这些方法运转,尽管这个程序的代码很
少,但使用它还是会节约大量的时间并且变得很轻松,在本章后面一些例子中就可以感受到

这一点。


原创粉丝点击