读取一个键盘录入的数据,并打入在控制台上。
键盘本身就是一个标准的输入设备
对于java而言,对于这种输入设备都有对应的对象。
public class Io23_1 {
public static void main(String[] args) throws IOException {
readKey();
}
/* 这个阻塞的意思就是说:
* 程序一直停在read()方法这里,等待数据。
* 没有数据就不继续往下执行,直到得到数据
*/
private static void readKey() throws IOException {
InputStream in=System.in;
int ch=in.read(); //阻塞式方法
System.out.println(ch);
int ch1=in.read(); //阻塞式方法
System.out.println(ch1);
int ch2=in.read(); //阻塞式方法
System.out.println(ch2);
/*
* 13 \n
* 10 \r 回车符
* */
//in.close();
//InputStream in=System.in; 这个流只有一个,随着系统的出现而出现。
//系统的消失而消失(close()不使用也是可以的,会随着系统的消失而关闭)。
//上面关啦,下面也创建不了。因为只有一个。
/* InputStream in2=System.in;
in2.read();*/
}
}
IO流(读取键盘录入)
public class Io24_1 {
public static void main(String[] args) throws IOException {
readKey2();
}
public static void readKey2() throws IOException{
/*
* 获取用户键盘录入的数据,
* 并将数据变成大写显示在控制台上,
* 如果用户输入的是over,结束键盘录入
*
*
* 思路:
* 1,因为键盘录入只读取一个字节,要判断是否是over,需要将读取到的字节转换为字符串。
*
* 2.那就需要一个容器,StringBuilder
*
* 3,在用户回车之前将录入的数据变成字符串判断即可。
* */
//1.创建容器
StringBuilder sb=new StringBuilder();
//2.获取键盘读取流
InputStream in=System.in;
//3.定义变量记录读取到的字节,并循环获取
int ch=0;
while((ch=in.read())!=-1){
//在存储之前需要判断是否为换行标记,因为换行标记不存储
if(ch=='\r')
continue;
if(ch=='\n'){
String temp=sb.toString();
if("over".equals(temp)){
break;
}
System.out.println(temp.toUpperCase());
sb.delete(0, sb.length());
}
else{
//将读取到的字节存储到StringBuilder中。
sb.append((char)ch);
}
}
}
}
转换流
public class Io25_1 {
public static void main(String[] args) throws IOException {
//字节流
InputStream in=System.in;
//将字节转换成字符的桥梁。转换流 。解码
InputStreamReader isr=new InputStreamReader(in);//字符流
//对字符流进行高效装饰
BufferedReader bufr=new BufferedReader(isr);//缓冲区
OutputStream out=System.out; //字节流,字节数据
//字节转换字符的桥梁。编码
OutputStreamWriter osw=new OutputStreamWriter(out);
BufferedWriter bufw=new BufferedWriter(osw);
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
//System.out.println(line.toUpperCase());
/* osw.write(line.toUpperCase()+"\r\n");
osw.flush();*/
bufw.write(line.toUpperCase()); //将字符数据用缓冲区对象将数据写入到缓冲区,目的地是osw
bufw.newLine();
bufw.flush();
}
}
}
//案例2
public class Io25_2 {
public static void main(String[] args) throws IOException {
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}
转换流-需求演示
public class Io26_1 {
public static void main(String[] args) throws IOException {
demo3();
}
public static void demo1() throws IOException{
//把控制台输入的内容,写入到一个文件中去
/* InputStream in=System.in;
InputStreamReader sr=new InputStreamReader(in);*/
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
/* FileOutputStream os=new FileOutputStream("E:\\Io\\a.txt");
OutputStreamWriter sw=new OutputStreamWriter(os);*/
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\Io\\a.txt")));
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
public static void demo2() throws IOException{
//将一个文本文件,读取到控制台显示
BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\Io\\a.txt")));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
public static void demo3() throws IOException{
//将一个文本文件内容复制到另外一个文本文件中
BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\Io\\a.txt")));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\Io\\b.txt")));
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}