package sc.IO; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; /*标准输入流 * 源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。 * 在java中用System.in 得到一个InputStream字节输入流。 * */ public class System01 { public static void main(String[] args) throws IOException { //需求:在控制台输入1个字母,然后原样输出 //InputStream in=System.in; //int c=in.read(); //System.out.println((char)c); //控制台输入字符进来,转换为字节流,因为是字母,所以再把得到编码强转为char // 需求:输入一句话,然原样输出 InputStream in1 = System.in;//控台输入,电脑读取的是字节流 byte [] buf=new byte[1024];//创建一个字节流数组 int len; len=in1.read(buf);//把in1字节流放入buf数组,反回len字节数组长度 String str=new String(buf,0,len);//没有写解码类型,平台默认编码 System.out.println(Arrays.toString(buf)); //[-76, -78, -57, -80, -61, -9, -44, -62, -71, -30, 13, 10, 0, 0,...] //13 和 10 是 回车和换行; buf中自动包含回车和换行,所以len长度也不可靠 System.out.println(str);// //输出结果:床前明月光 // 需求:从控制台高效读取一行数据。把一首诗写入文件。 InputStream in2 = System.in;//控台输入字节流 InputStreamReader reader=new InputStreamReader(in2, "GBK");//把字节流通过GBK解码为字符流 BufferedReader br=new BufferedReader(reader);//读取整行字符 File file =new File("D:\\gameproject\\a.txt");//创建文件 FileWriter whiter=new FileWriter(file);//把字符写入文件 BufferedWriter bw = new BufferedWriter(whiter);//整行写入 String end = "bye"; while(true){ String line=br.readLine();//整行读取放入数组 if(line.equals(end)) { break; } bw.write(line); //整行写入 bw.newLine();//换行 } bw.flush();//刷新缓存区 bw.close();//关闭通道 whiter.close();//关闭通道
注意:
[1] 标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。
标准输入流(System in)和输出流PrintStream(System.out)
原文:https://www.cnblogs.com/406070989senlin/p/10827815.html