字符流练习


 将键盘录入的数据拷贝到当前项目下的text.txt文件中,键盘录入数据当遇到quit时就退出

public class k {

	/**
	 * 分析:
	 * 1,创建键盘录入对象
	 * 2,创建输出流对象,关联text.txt文件
	 * 3,定义无限循环
	 * 4,遇到quit退出循环
	 * 5,如果不quit,就将内容写出
	 * 6,关闭流
	 * @throws IOException 
	 */
	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException {
		
		//1,创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		//2,创建输出流对象,关联text.txt文件
		FileOutputStream fos = new FileOutputStream("text.txt");
		System.out.println("请输入数据:");
		//3,定义无限循环
		while(true) {
			String line = sc.nextLine();//将键盘录入的数据存储在line中
			//4,遇到quit退出循环
			if("quit".equals(line)) {
				break;
			}
			//5,如果不quit,就将内容写入
			//String lines =new String(line.getBytes(),"UTF-8");
			fos.write(line.getBytes());	//字符串写出必须转换成字节数组
			fos.write("\r\n".getBytes());
		}
		//6,关闭流
		fos.close();
	}

}


将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换

* 注意事项:
* 流对象尽量晚开早关

public class test {

	/**
	 * @param args
	 * 分析:
	 * 1,创建输入输出流对象
	 * 2,创建集合对象
	 * 3,将读到的数据存储在集合中
	 * 4,倒着遍历集合将数据写到文件上
	 * 5,关流
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//改写后是尽量晚开早关
		// 1,创建输入输出流对象
		BufferedReader br = new BufferedReader(new FileReader("zzz.txt"));
		
		//2,创建集合对象
		ArrayList<String> list = new ArrayList<>();
		
		//3,将读到的数据存储在集合中
		String line;
		while((line = br.readLine()) != null) {
			list.add(line);
		}
		br.close();	//关流
		
		//4,倒着遍历集合将数据写到文件上
		BufferedWriter bw = new BufferedWriter(new FileWriter("revzzz.txt"));
		for(int i = list.size() - 1; i >= 0; i--) {
			bw.write(list.get(i));
			bw.newLine();
		}
		//5,关流
		
		bw.close();
	}

}


获取一个文本上每个字符出现的次数,将结果写在times.txt上

public class test2 {

	/**
	 * @param args
	 * 1,创建带缓冲区的输入流对象
	 * 2,创建双列集合对象,目的是把字符当作键,把字符出现的次数当作值
	 * 3,通过读取不断向集合中存储,存储的时候要判断,如果不包含这个键就将键和值为1存储,如果包含就将键和值加1存储
	 * 4,关闭输入流
	 * 5,创建输出流对象
	 * 6,将结果写出
	 * 7,关闭输出流
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1,创建带缓冲区的输入流对象
		BufferedReader br = new BufferedReader(new FileReader("zzz.txt"));
		
		//2,创建双列集合对象,目的是把字符当作键,把字符出现的次数当作值
		HashMap<Character, Integer> hm = new HashMap<>();
		
		//3,通过读取不断向集合中存储,存储的时候要判断,如果不包含这个键就将键和值为1存储,
		//如果包含就将键和值加1存储
		int c;
		while((c = br.read()) != -1) {
			char ch = (char)c;
			if(!hm.containsKey(ch)) {
				hm.put(ch, 1);
			}else {
				hm.put(ch, hm.get(ch) +  1);
			}
			
			//hm.put(ch, !hm.containsKey(ch)? 1 : hm.get(ch) + 1);
		}
		
		//4,关闭输入流
		br.close();
		
		//5,创建输出流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt"));
		
		//6,将结果写出
		for (Character key : hm.keySet()) {
			bw.write(key + "=" + hm.get(key));
		}
		
		bw.close();
	}

}


 当我们下载一个试用版软件,没有购买正版的时候,每执行一次就会提醒我们还有多少次使用机会

用学过的IO流知识,模拟试用版软件,
 试用10次机会,执行一次就提示一次您还有几次机会,如果次数到了提示请购买正版


public class test3 {

	/**
	 * @throws IOException 
	 * 分析:
	 * 1,创建带缓冲的输入流对象,因为要使用readLine方法,可以保证数据的原样性
	 * 2,将读到的字符串转换为int数
	 * 3,对int数进行判断,如果大于0,就将其--写回去,如果不大于0,就提示请购买正版
	 * 4,在if判断中要将--的结果打印,并将结果通过输出流写到文件上
	 */
	public static void main(String[] args) throws IOException {
		
		//1,创建带缓冲的输入流对象,因为要使用readLine方法,可以保证数据的原样性
		BufferedReader br = new BufferedReader(new FileReader("config.txt"));//10
		//FileWriter fw = new FileWriter("config.txt");不能写在这
		
		//2,将读到的字符串转换为int数
		String line = br.readLine();
		int times = Integer.parseInt(line);//将数字字符串转换为数字
		
		//3,对int数进行判断,如果大于0,就将其--写回去,如果不大于0,就提示请购买正版
		if(times > 0) {
			//4,在if判断中要将--的结果打印,并将结果通过输出流写到文件上
			System.out.println("您还有" + times-- + "次机会");
			FileWriter fw = new FileWriter("config.txt");
			fw.write(times + "");
			fw.close();//不关流的话,会出现nul
		}else {
			System.out.println("您的试用次数已到,请购买正版");
		}
		//关闭流
		br.close();
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值