IO流(二)

键盘录入读取

public static final InputStream in
 想让字节读取流,可以实现读取一行的功能,
   将字节转成字符来进行操作 ,使用BufferedReader中的readLine()方法
   转换流:字节流向字符的桥梁,InputStreamReader 字符流
   InputStreamReader(InputStream in) 传递字节流对象
package cn.itcast.ios;
/*
 * 通过键盘的录入,引入转换流
 */
import java.io.*;
public class TranseDemo {
	public static void main(String[] args) throws IOException{
		StringBuilder sb = new StringBuilder();
		//返回字节流对象,读取方法
		InputStream in = System.in;
		int len = 0 ; 
		while((len = in.read())!=-1){
			if(len=='\r')
				continue;
			if(len=='\n'){
				System.out.println(sb.toString());
			    sb.delete(0, sb.length());	
			}
			else
				sb.append((char)len);
		}
	}
}


   要求: 控制台录入,将录入后的一行字母,转成大写,打印在控制台上
package cn.itcast.ios;
import java.io.*;
public class TranseDemo1 {
	public static void main(String[] args) throws IOException{
		InputStream in = System.in;
		InputStreamReader isr = new InputStreamReader(in);
		//in通过转换流,变成了字符流,既然是字符流,可以用字符流缓冲区
		BufferedReader bfr = new BufferedReader(isr);
		String line = null;
		while((line = bfr.readLine())!=null){
			if("over".equals(line))
				break;
			System.out.println(line.toUpperCase());
		}
	}
}


   要求2:控制台录入,将录入后的一行字母,转成大写,保存在文件中

package cn.itcast.ios;
/*
 * 控制台录入,将录入后的一行字母,转成大写,保存在文件中
 * System.in
 * 通过转换流,将字节变字符,读取一行,读取一行后返回字符串,字符串转大写
 * 流对象,包装文本文件,向文件中个,写入
 * FileOutputStream
 */
import java.io.*;
public class TranseDemo3 {
	public static void main(String[] args)throws IOException {
		//接收键盘录入
		InputStream in = System.in;
		InputStreamReader isr = new InputStreamReader(in);
		BufferedReader bfr = new BufferedReader(isr);
		//用字节输出流,包装文件
		FileOutputStream fos =  new FileOutputStream("c:\\upperCase.txt");
		//BufferedWriter写一个换行的功能,直接写字符串
		OutputStreamWriter osw = new OutputStreamWriter(fos);
		BufferedWriter bfw = new BufferedWriter(osw);
		String line = null;
		while((line = bfr.readLine())!=null){
			if("over".equals(line))
				break;
			bfw.write(line.toUpperCase());
			bfw.newLine();
			bfw.flush();
		}
		fos.close();
		bfr.close();
		bfw.close();
		
		
	}
}


   OutputStreamWriter(OutputStream out) 是字符流通向字节流的桥梁
  转换流的特点总结:
     InputStreamReader  字符流
     OutputStreamWriter 字符流
  不管是,谁转谁,就是用字符流的功能,去操作字节流
   InputStreamReader,构造方法,中传递是字节输入流
   BufferedReader( InputStreamReader对象),提供读一行


   OutputStreamWriter,构造方法,传递的是字节输出流
   BufferedWriter( OutputStreamWriter对象),提供写一行的功能
   只能处理文本类型文件

流的操作规律

   |-- 操作的数据源
      |-- 数据源是文本文件,读取 FileReader
         |-- 需要高效吗,带有Buffered


      |-- 数据源不确定,读取FileInputStream
         |-- 需要高效吗,选择一带有Buffered,选择二 自定义数组进行缓冲,字节数组
      
      |-- 数据源是控制台,或者是另一端的网络
         |-- System.in InputStream,如果需要读取一行,使用转换流InputStreamReader
    在进行BufferedReader对转换流进行缓冲


   |-- 操作的数据目的
      |-- 数据目的是文本文件,写入FileWriter
         |-- 需要高效吗,带有Buffered


      |-- 数据目的不确定,写入FileOutputStream
         |-- 需要高效吗,选择一带有Buffered,选择二 自定义数组进行缓冲,字节数组
      
      |-- 数据目的是控制台,或者另一端的网络
         |-- System.out OutputStream,如果写一行,写一个换行,使用转换流OutputStreamWriter
   在进行BufferedWriter对转换流进行缓冲
package cn.itcast.ios;
/*
 * 读取一个文本文件
 *   字节输入流--》InputStreamReader转成字符流--》字符流缓冲读取一行
 * 将文件中的字母转成大写后,toUpperCase()
 * 
 * 打印在控制台
 * System.out数据目的
 * OutputStream out = System.out;
 * 字符输出流-->OutputStreamWriter-->转成字节流--字符流缓冲区,写一行写一个换行
 */
import java.io.*;
public class TranseDemo4 {
	public static void main(String[] args)throws IOException {
		//FileInputStream fis = new FileInputStream("c:\\THIRDPARTYLICENSEREADME-JAVAFX.txt");
		//转换流,转成字符流操作
		InputStream in = System.in;
		InputStreamReader isr = new InputStreamReader(in);
		//字符流缓冲区,读取一行的效果
		BufferedReader bfr = new BufferedReader(isr);
		
		OutputStream out = new FileOutputStream("c:\\qqqq.xtxt");
		//转换流,将字符转成字节
		OutputStreamWriter osw = new OutputStreamWriter(out);
		//字符流缓冲区,写一行,写一个换行、
		BufferedWriter bfw = new BufferedWriter(osw);
		
		String line = null;
		while((line = bfr.readLine())!=null){
			bfw.write(line.toUpperCase());
			bfw.newLine();
			bfw.flush();
		}
		bfw.close();
		bfr.close();
		//in.close();
	}
}


package cn.itcast.ios;
import java.io.*;
public class TranseDemo5 {
	public static void main(String[] args) throws IOException{
	
		BufferedReader bfr = new 
				BufferedReader(new InputStreamReader(new FileInputStream("c:\\qqqq.xtxt")));
		
		BufferedWriter bfw = new
				BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:\\new.txt")));
				
		String line = null;
		while((line = bfr.readLine())!=null){
			if("over".equals(line))
				break;
			bfw.write(line.toUpperCase());
			bfw.newLine();
			bfw.flush();
		}
		bfw.close();
		bfr.close();
	}
}


 10.猜数字游戏:随机一个数字100,猜,小了,或者大了,或者中了
   |-- 功能1,随机数,100以内的整数  new Random().nextInt(100)
   |-- 功能2,获取用户的键盘录入  System.in 读取一行 转换流 被变成了字符串
   |-- 功能3,字符串转成整数 Integer.parse()
   |-- 功能4,将被转后的数字,和字符串比较通知用户,如果中了,程序结束了
package cn.river.test;
import java.io.*;
public class NumberGame {
	public static void main(String[] args) throws IOException {
		int num = GetNum.getNum();
		BufferedReader br = null;
		
		System.out.println("请猜数字");
		while(true){
			 br = new BufferedReader(new InputStreamReader(System.in));
			String line = br.readLine();
			int in = Integer.parseInt(line);
			if(in>num){
				System.out.println("大了");
			}else if(in<num){
				System.out.println("小了");
			}else{
				System.out.println("中了");
				break;
			}
					
		}
		//br.close();
	}
}
package cn.river.test;

import java.util.Random;

public class GetNum {
	private GetNum(){}
	public static int getNum(){
		return new Random().nextInt(100);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值