System.out: 对应的是标准输出设备,控制台
System.in: 对应的标准输入设备:键盘
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
int by=in.read();
System.out.println(by);
}
}
这里输出97是因为我们是Int 型
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
int by1=in.read();
int by2=in.read();
int by3=in.read();
System.out.println(by1);
System.out.println(by2);
System.out.println(by3);
}
}
上次我讲到 一个回车就是\r\n 这样子
而这里的13就是\r 10就是\n
需求 :
1.通过键盘录入数据
2.当录入一行数据后,就将该行数据进行打印
3.如果录入的数据是over,那么就停止录入
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
int ch=0;
while((ch=in.read())!=-1)
{
System.out.println(ch);
}
}
}
此程序可以连续键盘写入,但是却不能停下来 ,需要用Ctrl +C 才可以退出
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;//继续循环
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;//如果over,跳出循环
System.out.println(s.toUpperCase());//我们这里为了区分键盘的写入和输出 就让输出表示为大写
}
else
sb.append((char)ch);//继续等待键盘的录入
}
}
}
到这里我们发现,我们的程序好像并没有实现它的全部功能,而且后面录入的字符会和前面的记忆字符一起被打印称为大写输出,输入over 后也不能退出的现象。
利用delete 语句进行清除
import java.io.*;
public class ReadIn
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;//继续循环
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;//如果over,跳出循环
System.out.println(s.toUpperCase());//我们这里为了区分键盘的写入和输出 就让输出表示为大写
sb.delete(0,sb.length());//清除缓冲区中所有的内容
}
else
sb.append((char)ch);//继续等待键盘的录入
}
}
}
通过刚才的键盘录入一行的数据并且打印其的大写,发现其实就是读取一行的数据的原理。也就是readLine方法。
所以,我们能不能直接使用readLine()方法啦进行完成键盘的录入的一行数据的读取呢?
readLine方法是字符流BufferedReader 类中的方法
而键盘录入的read方法是字节流InputStream 的方法
怎么能不能将字节流转换成字符流在使用的字符流的readLine方法呢?
InputStreamReader 是字节流通向字符流的桥梁
用法: InputStreamReader(ImputStream in)
import java.io.*;
public class TranStreamDemo
{
public static void main(String[] args)throws IOException
{
//获取键盘录入的对象
InputStream in=System.in;
//提高字节流对象转成字符流对象,使用转换流。
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效的操作
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
}
}
import java.io.*;
public class TranStreamDemo
{
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;
bufw.write(line.toUpperCase());//前面用到了 System.out后已经将打印的句子封装在了bufw中,所以只需要用则句话即可。
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
//获取键盘录入的对象
InputStream in=System.in;
//提高字节流对象转成字符流对象,使用转换流。
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效的操作
BufferedReader bufr=new BufferedReader(isr);
就可以看作为一句话
BufferedReader bufr=(new BufferedReader(new InputStreamReader(System.in)));
==================================================================================
//获取控制台的打印对象
OutputStream out=System.out;
//将输出的字节流转换为字符流
OutputStreamWriter osw=new OutputStreamWriter(out);
//为了提高效率,将字符串进行缓冲区技术高效的操作
BufferedWriter bufw=new BufferedWriter(osw);
也是一样
BufferedWriter bufw=(new BufferedWriter(new OutputStreamWriter(System.out)));
import java.io.*;
public class TranStreamDemo
{
public static void main(String[] args)throws IOException
{
/*获取键盘录入的对象
InputStream in=System.in;
//提高字节流对象转成字符流对象,使用转换流。
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效的操作
BufferedReader bufr=new BufferedReader(isr);
*/
//化简为一句话
BufferedReader bufr=(new BufferedReader(new InputStreamReader(System.in)));
/*
OutputStream out=System.out;
OutputStreamWriter osw=new OutputStreamWriter(out);
BufferedWriter bufw=new BufferedWriter(osw);
*/
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());//前面用到了 System.out后已经将打印的句子封装在了bufw中,所以只需要用则句话即可。
bufw.newLine();
bufw.flush();
}
bufr.close();
}
}
BufferedWriter bufw=(new BufferedWriter(new OutputStreamWriter(System.out)));
这句话在我们之后,只要一出现键盘的录入,我们就要记得。很重要。
首先是 setIn
import java.io.*;
public class TranStreamDemo
{
public static void main(String[] args)throws IOException
{
///改变它的输出源
System.setIn(new FileInputStream("quyuquan1996.txt"));
//其实下面都没有用。大家不用看下面
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();
}
bufr.close();
}
}
直接将 目标文件的数据 读出
再看 setOut
import java.io.*;
public class TranStreamDemo
{
public static void main(String[] args)throws IOException
{
///改变它的输出源
//System.setIn(new FileInputStream("quyuquan1996.txt"));
System.setOut(new PrintStream("prinTln.txt"));
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();
}
bufr.close();
}
}
import java.io.*;
public class TranStreamDemo
{
public static void main(String[] args)throws IOException
{
///改变它的输出源
System.setIn(new FileInputStream("quyuquan1996.txt"));
System.setOut(new PrintStream("prinTln.txt"));
//这样 又不关下面的事情了
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();
}
bufr.close();
}
}