Java学习笔记——输入输出IO

本文详细介绍了Java中Scanner、BufferedReader、StreamTokenizer三种输入流处理方式以及System.out、PrintWriter和BufferedWriter三种输出流的使用,重点讲解了它们之间的差异,包括数据类型处理、换行操作和异常管理等。
摘要由CSDN通过智能技术生成

输入篇

第一种方法:Scanner

Scanner cin=new Scanner(System.in);
	   int a=cin.nextInt();
	   float b=cin.nextFloat();
	   double c=cin.nextDouble();
	   String str1=cin.next();//String类型,遇到空格结束
	   String str2=cin.nextLine();//String类型,读取一行数据,遇到换行结束。类似gets
	   while(cin.hasNext()){
		   
	   }// 可用此语句循环输入
	   cin.close();

        此种方法在做算法题时不太推荐,因为速度较慢。

第二种方法:BufferedReader

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       String str3=br.readLine();//读一行
       int x=br.read();//read()只读取一个字符
       String[] arr=str3.split(" ");//按空格拆分
       int a1=Integer.valueOf(arr[0]);//将String类型转换成int类型

        在windows中按一下回车键 一共有两个字符 “\n\r” 而read()只能读取一个字符;
        所以如要要用read来达到吸收回车的目的,需要用两个read(); 
        如果用readLine()的话会将"\n\r"全部吸收 , 所以只需要一个readLine()来吸收回车。

第三种方法:StreamTokenizer

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer st =new StreamTokenizer(br);
	   st.nextToken();//每读入一个,就移动一次,相当于一个跟踪的“指针”
	   int i=(int)st.nval;//数字
	   st.nextToken();
	   String s=st.sval;//字符串
       while (st.nextToken() != StreamTokenizer.TT_EOF){
}
       //多组输入,StreamTokenizer.TT_EOF这个是个参数,就是相当于EOF了。

        sval是获取不带空格的字符串,含有空格的字符串无法全部读取,只会获取空格之前的。并且只能用来获取含字母和数字、中英文句号的字符串。

输出篇

第一种方法:System.out

        System.out.println("123"); //输出并且换行
        System.out.print("123");   //输出但不换行
        System.out.printf("%d %s",a,s); //输出不换行,可以指定类型

第二种方法:BufferedWriter

            int a =65;
        	String s ="Hello";
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
            
            out.write(a);//输出 :A
            out.write(a+"\n");//输出:65(换行)
            out.write(Integer.toString(a));//输出:65
            out.write(s);
            
            out.flush();//刷新输出缓冲区,把缓冲区的内容输出到控制台
            out.close();

         write() 不能直接输出int类型, 因为write(int a) 会输出其对应的ASCii码的字符 ,比如输出 65 会显示 A。

        所以当需要输出一个int类型的变量时, 可以用Integer.toString(int a)方法 将其变为字符串形式输出。或者使用 + 拼接一个字符串,这样 参数整体就是一个字符串了,比如加一个换行符。

第三种方法:PrintWriter(推荐)

            PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
            int a=1;
            out.println("第一行");//println可以换行
            out.println("第二行");
            out.printf("%d",a);
            out.print(a);
            out.flush();

        二者区别:

1. PrintWriter的print、println方法可以接受任意类型的参数,而BufferedWriter的write方法只能接受字符、字符数组和字符串;

2. PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法;

3. PrintWriter的方法不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生;

4. PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);

(以上内容摘自:PrintWriter and BufferedWriter区别和使用「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com)icon-default.png?t=N7T8https://cloud.tencent.com/developer/article/2095430

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值