键盘录入读取
public static final InputStream in
想让字节读取流,可以实现读取一行的功能,
将字节转成字符来进行操作 ,使用BufferedReader中的readLine()方法
转换流:字节流向字符的桥梁,InputStreamReader 字符流
InputStreamReader(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);
}
}