Java中IO流-29-IO流练习题:统计一个文件中字符出现个数

本文介绍两个基于IO流的应用实例:一是统计文本文件中各字符出现次数,并将结果写入新文件;二是通过读写文件模拟软件试用倒计时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇来利用IO流知识来做两个练习题。第一个题目是在文本文件中统计字符出现次数,并写入到一个txt文件里。第二个练习题是模拟,试用软件30天倒计时,这里我们简化一下,运行一次代码,试用天就减去1天。

1.文本文件内统计字符出现个数

题目:给定一个文本文件,统计字符出现个数并写入到文件times.txt中。

分析:

前面我们学习双列链表的时候,首选就是用HashMap来解题。只不过当时字符来源是字符串或者数组或者来源键盘输入。今天来自文本文件,所以,我们需要结合IO流的知识和HashMap知识来解决这个面试题。

package io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.TreeMap;

public class Test3 {
	/**
	 * 获取一个文本上某些字符出现的次数,将结果写在time.txt上
	 * 
	 * 
	 * 分析:
	 * 1.首先创建带缓冲的输入流对象
	 * 2.创建双列集合对象,hashmap或者treemap(支持排序)
	 * 3.将读到的字符存取在双列结合,进行判断,如果不包含就键和1存储,如果包含这个键,就将改建和值+1存储
	 * 4.关闭输入流,创建输出流对象
	 * 5.遍历集合,将集合内容写到输出文件time.txt上,关闭输出流
	 * @throws IOException 
	 * 
	 */

	public static void main(String[] args) throws IOException {
		//1.首先创建带缓冲的输入流对象
		BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));
		
		//2 创建双列集合对象,hashmap或者treemap(支持排序)
		TreeMap<Character, Integer> tm = new TreeMap<>();
		
		//3.将读到的字符存取在双列结合,进行判断,如果不包含就键和1存储,如果包含这个键,就将改建和值+1存储
		int ch;
		while( (ch = br.read()) != -1) {
			char c = (char)ch;  //int转换char类型
			if (!tm.containsKey(c)) {
				tm.put(c, 1);
			}else {
				tm.put(c, tm.get(c)+1);
			}
		}
		//4.关闭输入流,创建输出流对象
		br.close();
		BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt"));
		//遍历集合,将集合内容写到输出文件time.txt上,关闭输出流
		for(Character key : tm.keySet()) {
			bw.write(key + "="+ tm.get(key));
			bw.newLine();    //换行
		}
		bw.close();
	}

}

2.模拟软件试用天数

加入一个文件config.txt里面存储试用软件天数,这里我们用10天来举例。运行一次代码,这个文件里面的天数就减去一,知道天数为零,就打印消息“试用天数已结束,请购买正版软件。”。

package io;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test4 {
	/**
	 * 模拟软件试用天数
	 * @param args
	 * 
	 * 分析:
	 * 1.创建带缓冲流的输入流对象,因为要使用readLine方法,保持数据原样性。
	 * 2.将读取的字符串转换为int数
	 * 3.对int数进行判断,如果大于0,就进行--操作,如果不大于0就提示请买正版
	 * 4.对判断结果使用输出流写入到config.txt文件,用字符输出流
	 * @throws IOException 
	 */

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("config.txt"));
		
		String line = br.readLine();
		//字符串转换为int类型
		int count = Integer.parseInt(line);
		
		//3.判断
		if( count > 0) {
			System.out.println("您还有" +count-- + "次机会");
			FileWriter fw = new FileWriter("config.txt");
			fw.write(count + "");
			fw.close();
		} else {
			System.out.println("试用已过期,请购买正版。");
		}
		
		br.close();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值