之前学习的内容都是针对文件中的数据,可以进行字符编码的转化,也有专门提高效率的。主要是针对文件(来源和目的)
下面考虑数据的来源 键盘
package IO;
import java.io.*;
//演示键盘输入
//需求:获取键盘输入
public class KeyBoardDemo1 {
public static void main(String[] args) throws IOException {
//1.键盘怎么输入 : 在System 类中找到标准输入流 属性 in 对应的类型是 final InputStreamstem
InputStream in = System.in;//获取输入流对象
// int ch = in.read();//这样的输入十分麻烦,这里是单个字节。还要考虑读一片,和读字符
//以上方法pass
//能不能一次读一行字符串(输入都是一行一行输入的)readLine() 但是这个方法是BufferedReader 的而且BufferedReader 使用时必须接受字符流对象
//但是键盘输入是字节流 ——————将字节流转换为字符流
//获取键盘输入的正确打开方式
//通过字节流与字符流之间的桥梁
InputStreamReader reader = new InputStreamReader(in);
//对字符流进行高效读取,并且使用readLine 方法
BufferedReader buf = new BufferedReader(reader);
//BufferedWriter buf = new BufferedWriter(new InputStreamReader(System.in)); //代码归一
String line = null;
while((line = buf.readLine())!=null){
/*键盘读取要自定义结束标志
读取的方法返回的是字符串无法用等号判断是否与另一个字符串相等
在readLine 方法中是读取到换行符才会返回null(可以理解为常量) ,跟读到 null 返回字符串 null(可以理解为变量) 是不一样的
*/
if("over".equals(line)){
break;
}/*
null
null
12
12
over
键盘录入没有结束标记,也就是你的输入永远无法结束,所以要自定义结束标记,强制结束
*/
System.out.println(line);
}
}
}
注意:(自己在代码实现的时候没有注意到的)
1.键盘读取要自定义结束标志
读取的方法返回的是字符串无法用等号判断是否与另一个字符串相等
在readLine 方法中是读取到换行符才会返回null(可以理解为常量) ,跟读到 null 返回字符串 null(可以理解为变量) 是不一样的
完成需求:从键盘读取数据存储在文件中:
package IO;
import java.io.*;
//需求:从键盘输入数据到文件中
public class KeyBoardTest1 {
public static void main(String[] args) throws IOException {
//1.目标文件
File file = new File("F:\\File\\tempfile\\Key");
//1.获取键盘输入
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
//创建输出流的缓冲去对象
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
String line = null;
while((line = buf.readLine())!=null){
if("over".equals(line)){
break;
}
//将读到的一行字符串写入文件中
writer.write(line);
writer.newLine();//获取系统换行!!!!!。也可以实现续写,一行一行的写入
writer.flush();
}
writer.close();
}
}