文本文件处理练习DoTXT

public class DoTXT {
    // 定义成员变量:路径,文件对象,临时变量
    private String path; // 文件路径
    private File f;
    private FileReader fr; // 所需文件流对象
    private FileWriter fw;
    private BufferedReader br;
    private BufferedWriter bw;
    private StringBuilder sb = new StringBuilder(); // 文本处理器
    private String tmp; // 临时文本
    private String product = "";// 结果文本
    private int count = 0; // 临时计数器

    // 构造方法
    public DoTXT(String path) {
        this.path = path;
        f = new File(path); // 建立路径

        // 创建文件
        if (!f.exists())
            try {
                f.createNewFile();
                System.out.println("文件已创建");
            } catch (IOException e) {
                System.err.println("文件创建失败!");
            }
    }

    // 读取文件内容
    public String doRead() {
        tmp = read();//
        sb.setLength(0); // 初始化变量
        product = ""; // 初始化变量
        return tmp;
    }

    // 查找文件内容
    public String doFind(String... s) {
        tmp = read(s);//
        sb.setLength(0); // 初始化变量
        product = ""; // 初始化变量
        return tmp;
    }

    // 文件处理方法
    // 封装了读取和查找功能
    // 当参数数组长度为0时为读取,当参数数组长度不为0时为查找
    private String read(String... s) {
        // 包装流对象
        try {
            fr = new FileReader(f);
            br = new BufferedReader(fr);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return "";
        }

        // 读取内容
        try {
            while ((tmp = br.readLine()) != null) {
                sb.append(tmp);

                // 找到目标单词,并用括号括起来
                if (s.length != 0) {// 判断是否需要进行查找
                    for (String str : s) {// 遍历关键词
                        while ((count = sb.indexOf(str, count)) != -1) {
                            sb.insert(count, '(');
                            count = count + str.length() + 1;// 从找到的关键词尾,开始查找下一个关键词
                            sb.insert(count, ')');
                        }
                        count = 0;// 重置查找不同关键词的起始点
                    }
                }

                // 将行组合起来
                product += sb.toString();
                System.out.println(product);
                product += '\n';
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭文件流
            try {
                br.close();
            } catch (IOException e) {
            } finally {
                try {
                    fr.close();
                } catch (IOException e) {
                }
            }
        }

        return product; // 返回内容
    }

    // 覆盖或追加文件内容
    public void doWrite(String str, boolean byAppend) {
        // 处理数据
        if (byAppend) {
            str = this.doRead() + str;
        }
        // 包装流对象
        try {
            fw = new FileWriter(f);
            bw = new BufferedWriter(fw);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("写入失败");
        }

        // 写入数据
        try {
            bw.write(str);
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("写入失败");
        }
        // 关闭文件流
        try {
            br.close();
        } catch (IOException e) {
        } finally {
            try {
                fr.close();
            } catch (IOException e) {
            }
        }
    }

    public static void main(String[] args) {

        DoTXT txt = new DoTXT("txt.txt");
        // txt.doWrite(txt.doFind(args), false);

        System.out.println(txt.doRead());

    }
}

 

posted @ 2014-04-29 20:23  mycome  阅读(234)  评论(0编辑  收藏  举报