这篇来利用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();
}
}