public class test { public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("input x:");
int i = br.read();
System.out.println(i);
System.out.println("input y:");
int j = br.read();
System.out.println(j);
System.out.println("input z:");
int z = br.read();
System.out.println(z);
}}
运行后
sand:90% java test
input x:
我输入
1然后就跳出了下面的内容
49
input y:
10
input z:这是为什么呢?
我希望得到的是输出1
然后再input y:
等待我再次输入到底哪里有问题呢?
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("input x:");
int i = br.read();
System.out.println(i);
System.out.println("input y:");
int j = br.read();
System.out.println(j);
System.out.println("input z:");
int z = br.read();
System.out.println(z);
}}
运行后
sand:90% java test
input x:
我输入
1然后就跳出了下面的内容
49
input y:
10
input z:这是为什么呢?
我希望得到的是输出1
然后再input y:
等待我再次输入到底哪里有问题呢?
所以, 你输入1得到49
这里可以用readline()来去的一行的String
然后再转换为int来使用
BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)),
System.out.print("Enter a line:"),
System.out.println(stdin.readLine()),//2. 这是从文件中逐行读入数据BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java")),
String s. s2 = new String(),
while((s = in.readLine())!= null)
s2 += s + "
",
in.close(),//3. 这是从一个字符串中逐个读入字节
StringReader in1 = new StringReader(s2),
int c,
while((c = in1.read()) != -1)
System.out.print((char)c),//4. 这是将一个字符串写入文件
try {
BufferedReader in2 = new BufferedReader(new StringReader(s2)),
PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out"))),
int lineCount = 1,
while((s = in2.readLine()) != null )
out1.println(lineCount++ + ": " + s),
out1.close(),
} catch(EOFException e) {
System.err.println("End of stream"),
}
}
}对于上面的例子.需要说明的有以下几点:1. BufferedReader是Reader的一个子类.它具有缓冲的作用.避免了频繁的从物理设备中读取信息.它有以下两个构造函数:
BufferedReader(Reader in)
BufferedReader(Reader in. int sz)这里的sz是指定缓冲区的大小.它的基本方法:
void close() //关闭流void (int readAheadLimit) //标记当前位置boolean Supported() //是否支持标记int read() //继承自Reader的基本方法int read(char[] cbuf. int off. int len) //继承自Reader的基本方法String readLine() //读取一行内容并以字符串形式返回boolean ready() //判断流是否已经做好读入的准备void reset() //重设到最近的一个标记long skip(long n) //跳过指定个数的字符读取2. InputStreamReader是InputStream和Reader之间的桥梁.由于System.in是字节流.需要用它来包装之后变为字符流供给 BufferedReader使用.3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out"))),这句话体现了Java输入输出系统的一个特点.为了达到某个目的.需要包装好几层.首先.输出目的地是文件IODemo.out.所以最内层包装的是FileWriter.建立一个输出文件流.接下来.我们希望这个流是缓冲的.所以用BufferedWriter来包装它以达到目的.最后.我们需要格式化输出结果.于是将PrintWriter包在最外层.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class test { /**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("input x:");
//int i = br.read();
System.out.println(br.read()); System.out.println("input y:");
//int j = br.read();
System.out.println(br.read()); System.out.println("input z:");
int z = br.read();
System.out.println(z);
System.out.println("input z:");
int z1 = br.read();
System.out.println(z1);
System.out.println("input z:");
int z2 = br.read();
System.out.println(z2);
}
}
input x:
a
97
input y:
13
input z:
10后面的13 和 10 分别读的是 换行 ('\n')、回车 ('\r')
//接受输入数字 只接受0-4
int i = -1;
//这里你加上你对输入的要求 ascii码的限制
while (i < 48 || i > 52) {
try {
i = System.in.read();
} catch (IOException e) {
return -1;
}
if ((i < 48 || i > 52) && i != 13 && i != 10)
System.out.println("输入有误!重新输入!");
}
return i - 48;
}