java输入与输出

1.输入

首先需要构造一个与标准输入流System.in关联的Scanner对象。
①Scanner.nextLine() 方法的工作原理是读取输入直到遇到行结束符(包括 \n 或 \r\n),然后返回该行中内容,但它不会包含行结束符。
②Scanner.next() 读取的是下一个以空白字符(空格、换行符、制表符等)分隔的单个标记(token),而且不会包含任何空白字符。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        System.out.println("what's your name?");
        String s=in.nextLine();  //读取一行输入,读取的一行不会包含换行符
        System.out.println("s="+s);
        System.out.println("what's your name?");
        String ss=in.next();  //以空格分隔,读取第一个
        System.out.println("ss="+ss);
        System.out.println("How old are you?");
        int year=in.nextInt(); //读取输入的int数据
        System.out.println("year="+year);
        System.out.println("How tall are you(m)?");
        double high=in.nextDouble();  //读取输入的double
        System.out.println("high="+high+"m");
    }
}

在这里插入图片描述
之所以会出现上面的错误,是因为int year=in.nextInt();只读取了My,后面的字符被用于nextInt函数。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        System.out.println("what's your name?");
        String s=in.nextLine();  //读取一行输入
        System.out.println("s="+s);
        System.out.println("what's your name?");
        String ss=in.next();  //以空格分隔,读取第一个
        System.out.println("ss="+ss);
        //清空输入缓冲区
        if (in.hasNextLine()) {
            String temp = in.nextLine(); // 读取缓冲区中剩余的输入
            if (!temp.trim().isEmpty()) { // 检查是否有实际内容,trim()用来移除字符串两端的空白字符(包括空格、制表符、换行符等)
                System.out.println("temp=" + temp);
            }
        }
        System.out.println("How old are you?");
        int year=in.nextInt(); //读取输入的int数据
        System.out.println("year="+year);
        System.out.println("How tall are you(m)?");
        double high=in.nextDouble();  //读取输入的double
        System.out.println("high="+high+"m");
    }
}

在这里插入图片描述
注意,当使用的类不在java.lang中时,需要import相应的包。

对于控制台输入,输入的内容对于所有人都是可见的,所以如果输入的是密码的话,使用Scanner是不合适的,改为使用Console类。
在这里插入图片描述
值得注意的是Console并不能在IDE中使用,而是要在终端才能正常执行:

import java.io.Console;

public class Main{
    public static void main(String[] args){
        Console con=System.console();
        String userName=con.readLine("ID:");
        char[] passwd=con.readPassword("Pass Word:");
        boolean passwdFlag=true;
        String truePasswd="Fle";
        if(passwd.length==truePasswd.length()){  //注意String类为length()函数,而数组为length属性
            for(int i=0;i<passwd.length;i++){
                if(passwd[i]!=truePasswd.charAt(i)){
                    passwdFlag=false;
                    break;
                }
            }
        }
        if(userName.equals("Flea") && passwdFlag){
            System.out.println("Welcome!");
        }
        else{
            System.out.println("Go out!");
        }
    }
}

在这里插入图片描述

2.输出

2.1 格式化输出

格式化输出主要使用printf函数。其格式控制符如下表所示:
在这里插入图片描述

public class Main{
    public static void main(String[] args){
        int a=1;
        double b=1;
        float c=1;
        String s="I love young woman";
        System.out.printf("a=%d\n",a);
        System.out.printf("b=%f\n",b);
        System.out.printf("c=%f\n",c);
        System.out.printf("s=%s\n",s);
        //将int格式化为String
        System.out.printf("a=%s\n",a);
    }
}

在这里插入图片描述
注意,s可以格式化任何对象,调用的是所格式化对象的toString方法。
此外,还可以使用一些控制格式化外观的标志,如下表所示:
在这里插入图片描述

public class Main{
    public static void main(String[] args){
        int year=12; //年龄
        double high=1.2; //身高
        String name="Fle"; //名字
        //左对齐,用于打印表格
        System.out.printf("%-10s%-10s%-10s\n","name","year","high");
        System.out.printf("%-10s",name);
        System.out.printf("%-10d",year);
        System.out.printf("%-10f\n",high);
    }
}

在这里插入图片描述
格式化输出除了printf函数,还可以使用String.format方法。

public class Main{
    public static void main(String[] args){
        int a=1;
        double b=1.1;
        String s=String.format("%d %f",a,b);
        System.out.println("s="+s);
    }
}

在这里插入图片描述

3. 读文件

读文件使用Scanner类。
先构建一个file.txt。
在这里插入图片描述

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) throws IOException{
        //获得当前IDE的工作目录
        String dir=System.getProperty("user.dir");
        System.out.println(dir);
        String fileDir=dir+"\\src\\file.txt";
        System.out.println(fileDir);
        Scanner in=new Scanner(Path.of(fileDir), StandardCharsets.UTF_8);
        while(in.hasNextLine()){
            System.out.println(in.nextLine());
        }
    }
}

在这里插入图片描述
对于上面的程序,必须加上throws IOException如果用一个不存在的文件构造一个 Scanner 会产生异常。Java 编译器认为这些异常比“被零除”异常更严重。因此为了避免路径文件不存在,加上throws IOException
此外,注意Scanner in=new Scanner(Path.of(fileDir), StandardCharsets.UTF_8);不能写为Scanner in=new Scanner(fileDir, StandardCharsets.UTF_8);StandardCharsets.UTF_8用于指定编码,如果忽略字符编码,则会使用运行这个 Java 程序的机器的 “默认编码”。这不是一个好主意,如果在不同的机器上运行这个程序,可能会有不同的表现。

4. 写文件

写文件使用PrintWriter类。要注意的是,out.println或者其他方法都是输出内容到缓冲区,只有close之后才会保存内容到txt文件。

import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;

public class Main{
    public static void main(String[] args) throws IOException{
        //获得当前IDE的工作目录
        String dir=System.getProperty("user.dir");
        System.out.println(dir);
        String fileDir=dir+"\\src\\file.txt"; //如果文件不存在就创建目录
        System.out.println(fileDir);
        PrintWriter out=new PrintWriter(fileDir,StandardCharsets.UTF_8);
        out.println("I love java");
        out.println("I love young woman");
        out.close();  //关闭文件才会写入内容
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F l e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值