Java实现将文本内容反转

利用BufferedReader按行数读取目标文件,然后利用String的reverse对本行内容翻转,然后将内容存入集合中,以行数为标识。其中如果用String承载读取的行数会浪费内存,用StringBuffered装载。当将文件内容读完后,利用BufferedWriter将集合存储的字符串写入文件,写入顺序是行数倒叙,以实现翻转效果。
可两次调用方法,将文件翻转后还原,即可查看翻转效果,当然,如果有兴趣,可以写个程序判断文件内容是否相等.

public class ReverseText {
    public static File file = new File("src/源文件");
    public static File reverseFile = new File("src/反转文件");
    public static File restoreFile = new File("src/还原文件");
    {
        try {
            if (!reverseFile.exists()) {
                reverseFile.createNewFile();
            } else {
                reverseFile.delete();
                reverseFile.createNewFile();
            }
            if (!restoreFile.exists()) {
                restoreFile.createNewFile();
            } else {
                restoreFile.delete();
                restoreFile.createNewFile();
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
    /*
     * 读取源文件内容,读取的行数用字符串反转方法,接着按行数存入集合,
     * 然后倒着遍历将集合内容写入文件
     */
    public static void reverseText(File oldFile,File newFile){
        try {
            long start = System.currentTimeMillis();
            //创建集合存储文本内容
            Map<Integer, String> map = new HashMap<Integer, String>();
            BufferedReader br_File = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream(oldFile)));
            BufferedWriter bw_Reverse = new BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream(newFile,true)));
            int sum = 0; //读取的行数
            StringBuffer sb = new StringBuffer(); 
            String string;
            while ((string = br_File.readLine()) != null){
                sb.append(string);
                sb.reverse();
                map.put(sum, sb.toString());
                sb.delete(0, sb.length());
                sum++;
            }
            br_File.close();
            for(int i = sum-1 ;i>=0;i--){
                string = map.get(i);
                bw_Reverse.write(string);
                bw_Reverse.newLine();
            }
            bw_Reverse.close();
            long time = System.currentTimeMillis() - start;
            System.out.println("本次耗费时间:"+time);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public static void main(String[] args) {
        reverseText(file,reverseFile);
        reverseText(reverseFile, restoreFile);
        System.out.println(file.equals(restoreFile));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值