字符流进行文件读写操作及字符类型统计

//以下方法均使用了两种方法完成,第二种增加伪异常处理

  1. 从磁盘上读取一个文本文件(如某个java源代码),分别统计出文件中英文字母、空格、数字字符的个数。(注意文本文件中的数字指的是数字字符!!!)

方法一

package com.homework.homework0730;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @Author jinman1012@qq.com   2020/7/30 19:41
 * @Version 1.0
 * 读取文本文件,并统计文本中字母、空格、数字字符的个数
 */
public class Problem1 {
    public static void main(String[] args) throws IOException {
        String path = "D:\\test\\km.txt";
        InputStream in = new FileInputStream(path);
        //分别标识字母、空格、数字字符的个数
        int wordNum = 0, spaceNum = 0, nums = 0;
        int len;
        while ((len = in.read()) != -1) {
//            System.out.println(len);
            //in.read()返回每个字节对应ASCII编码
            //字母编码表中对应的范围
            if ((len > 96 && len < 123) || (len > 64 && len < 91)) wordNum++;
            //数字编码表中对应的范围
            if (len > 47 && len < 58) nums++;
            //空格编码表中对应的值
            if (len == 32) spaceNum++;
        }
        in.close();
        System.out.println("字母:" + wordNum + " " + "空格:" + spaceNum + " " + "数字:" + nums);
    }
}

方法二

package com.homework.homework0730;

import java.io.FileReader;
import java.io.IOException;

/**
 * @Author jinman1012@qq.com   2020/7/30 20:47
 * @Version 1.0
 * String path = "D:\\test\\km.txt";
 * InputStream in = new FileInputStream(path);
 */
public class Problem1Another {
    public static void main(String[] args) {
        //统计数字字符的个数
        int digitNum = 0;
        //统计英文字符的个数
        int charNum = 0;
        //统计空格字符的个数
        int spaceNum = 0;
        String path = "D:\\test\\km.txt";
        FileReader fileReader = null;
        try{
            fileReader = new FileReader(path);
            char[] buffer = new char[1024];
            int len;
            while ((len = fileReader.read(buffer)) != -1) {
                for (int i = 0; i < len; i++) {
                    if (buffer[i] >= 'a' && buffer[i] <= 'z' || buffer[i] >= 'A' && buffer[i] <= 'Z') charNum++;
                    if ((buffer[i] >= '0') && (buffer[i] <= '9'))digitNum++;
                    if (buffer[i] == ' ') spaceNum++;
                }
            }
            System.out.println("英文字符有: " + charNum + "个");
            System.out.println("数字字符有: " + digitNum + "个");
            System.out.println("空格字符有: " + spaceNum + "个");
        }catch(IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

  1. 在一个磁盘的文件里保存26个英文小写字母(乱序),将他们读入内存中,进行排序,把排好顺序的数再重新追加写到磁盘的该文件中。

方法一

package com.homework.homework0730;

import java.io.*;

/**
 * @Author jinman1012@qq.com   2020/7/30 19:41
 * @Version 1.0
 */
public class Problem2 {
    public static void main(String[] args) throws IOException {
        String path = "D:\\test\\kmwords.txt";
        InputStream in = new FileInputStream(path);
        OutputStream out = new FileOutputStream(path, true);
        //因为ascii码表中,小写字母对应的十进制编号为97-122,又因为要使用的是计数法,所以要申请个大小为123的数组
        //122的数组范围为0-121,计数法无法保存122'z'字母
        int[] wordAsciiNum = new int[123];
        //使用计数法 定义一个数组用来保存26个小写字母
        //经典文件输出写法
        int len;
        while((len = in.read()) != -1) {
            char word = (char)len;
            System.out.println(word);
            wordAsciiNum[len] = 1;
        }
        //判断数组value值是否为1 从小到大按顺序输出数组并写入对应文件后面即可
        for (int i = 0; i < wordAsciiNum.length; i++) {
            if(wordAsciiNum[i] == 1) {
                out.write(i);
            }
        }
        //关闭流
        in.close();
        out.close();
    }
}

方法二

package com.homework.homework0730;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

/**
 * @Author jinman1012@qq.com   2020/7/30 20:47
 * @Version 1.0
 */
public class Problem2Another {
    public static void main(String[] args) {
        FileWriter fileWriter = null;
        FileReader fileReader = null;
        String path = "D:\\test\\kmwords.txt";
        try {
            fileReader = new FileReader(path);
            char[] letters = new char[26];
            fileReader.read(letters);
            //sort方法进行数组排序
            Arrays.sort(letters);
            fileWriter = new FileWriter(path,true);
            //写入换行
            fileWriter.write('\n');
            fileWriter.write(letters);
            fileReader.close();
            fileWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值