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

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

}

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个练习要求使用Java输入输出流,将一个文件的内容转换为大写后写入另一个文件。 具体步骤如下: 1. 创建一个输入流,读取要转换的文件的内容。 2. 创建一个输出流,将转换后的内容写入另一个文件。 3. 使用循环读取输入流的每一行内容,并将其转换为大写。 4. 将转换后的内容写入输出流。 5. 关闭输入流和输出流。 需要注意的是,在使用输入输出流时,要注意异常处理,以及在使用完毕后及时关闭流,以免造成资源浪费和程序异常。 ### 回答2: Java的输入输出(IO)流是一种用于读写数据的机制。数据IO流包括字节流(InputStream和OutputStream)和字符流(Reader和Writer)。在Java,我们可以使用IO流来从文件读取数据,然后将数据写入到另一个文件。本题要求我们将文件的内容转为大写后写入另一个文件。 首先,我们需要使用File类打开要读取的文件。通过FileInputStream将文件转换为输入流,然后使用BufferedReader对输入流进行一行一行地读取。读取文件时,我们可以使用readLine()方法读取整行内容,读取到文件末尾时返回null。 接下来,我们需要将读取的内容转换为大写形式。可以使用toUpperCase()方法将小写字母转换为大写字母。使用StringBuffer或StringBuilder可以组合转换后的内容,然后写入新文件。写入文件时,我们使用FileOutputStream将文件转换为输出流,然后使用BufferedWriter输出内容。输出内容后需要使用flush()方法确保数据已经写入到文件。 最后,我们需要关闭文件。关闭文件可以使用try-catch-finally代码块的finally语句块,确保文件已经关闭。代码如下: ``` import java.io.*; public class FileIO { public static void main(String[] args) { String inputFileName = "input.txt"; String outputFileName = "output.txt"; FileInputStream inputStream = null; FileOutputStream outputStream = null; BufferedReader bufferedReader = null; BufferedWriter bufferedWriter = null; try { inputStream = new FileInputStream(inputFileName); outputStream = new FileOutputStream(outputFileName); bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); String line; while ((line = bufferedReader.readLine()) != null) { String upperLine = line.toUpperCase(); bufferedWriter.write(upperLine); bufferedWriter.newLine(); } bufferedWriter.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } if (bufferedWriter != null) { bufferedWriter.close(); } } catch (IOException ex) { ex.printStackTrace(); } } } } ``` 以上是使用Java输入输出(IO)流将文件内容转为大写后写入另一个文件的解决方案。 ### 回答3: Java的输入输出(I/O)是针对文件、网络等数据流进行处理的操作。其,数据I/O流可以用来从文件读取数据,并将数据转换为大写,然后将其写入到另一个文件。 首先,需要进行文件的输入输出操作。使用Java的InputStream和OutputStream操作类进行读写文件操作。InputStream用于从文件读取数据,而OutputStream可以将数据写入到文件。 ``` try { // 创建输入流和输出流对象 FileInputStream inputStream = new FileInputStream("test.txt"); FileOutputStream outputStream = new FileOutputStream("output.txt"); // 建立一个byte数组缓存读取到的数据 byte[] buffer = new byte[1024]; // 从输入流读取数据,并将其转换为大写 int length; while ((length = inputStream.read(buffer)) > 0) { for (int i = 0; i < length; i++) { buffer[i] = (byte) Character.toUpperCase((char) buffer[i]); } // 将数据写入到另一个文件 outputStream.write(buffer, 0, length); } // 关闭输入和输出流 inputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } ``` 以上代码,我们使用了InputStream的read()方法来从文件读取数据,并使用Character.toUpperCase()方法将其转换为大写。然后,将转换后的数据使用OutputStream的write()方法写入到另一个文件。 需要注意的是,尽管以上代码对文件进行了关闭操作,但在使用完InputStream和OutputStream后,一定要关闭它们以防止资源占用等问题发生。 练习数据I/O流的基础操作是Java编程非常重要的一部分,也是面试常见的问题,希望以上提供的例子能够对初学者有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值