首页 > 编程语言 >Java拾贝第十二天——System类

Java拾贝第十二天——System类

时间:2023-10-27 15:15:25浏览次数:31  
标签:Java 拾贝 System static File new 第十二天 public out

System类的常量

常量 描述
public final static InputStream in 系统标准输入,一般是键盘
public final static PrintStream out 系统标准输出,一般是显示器
public final static PrintStream err 错误输出

可以看到out和err是PrintStream类型的,而in是InputStream类型

System类中3个常量不符合命名规范是Java历史发展的产物,也叫Java发展遗留问题

System.out

其实下述打印语句就是调用的PrintStream类的方法。

System.out.print();
System.out.println();
System.out.printf();

栗子:

    public static void main(String[] args) {
        PrintStream out = System.out;
        try {
            out.write("hello world!".getBytes());

            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

程序运行结果:

hello world!

System.err

表示的是错误信息输出,如果程序出现错误,可以直接使用System.err。
栗子:

    public static void main(String[] args) {
      String s="hello";
        try {
            System.out.println(Integer.parseInt(s));
        } catch (NumberFormatException e) {
            System.out.println(e);
            System.err.println(e);//在控制台上输出
        }
    }

程序运行结果:
image

System.in

实际上是键盘的输入流,可以利用System.in完成从键盘读取数据。

栗子:

    public static void main(String[] args) {
        InputStream in = System.in;
        byte[] bytes = new byte[1024];
        try {
            int read = in.read(bytes);//将读取的内容载入bytes并返回内容长度
            System.out.println("键盘输入的内容:"+new String(bytes,0,read));

            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

程序运行结果:

asdasd12333333333333 //键盘的输入
键盘输入的内容:asdasd12333333333333

System类重定向输入/输出

在System类常量得知,一般输出标准是显示器,一般输入标准是键盘。

但是通过System类的重定向方法也可也改变System.in的输入源和System.out和System.err的输出位置

System类重定向方法如下:

方法 类型 描述
public static void setIn(InputStream in) 静态方法 重定向标准输入
public static void setOut(PrintStream out) 静态方法 重定向标准输出流
public static void setErr(PrintStream err) 静态方法 重定向错误输出

静态方法即意味着通过类名即可访问其方法。(实际上System的构造方法也是私有的无法实例化)

setIn(InputStream in)

重定向标准输入,从键盘读取更改至文件。
D:\IOtest\text.txt内:

hello
world!12.3true
撒旦静安寺点击
1111111111.99
false

外号:法外狂徒-张三 +年龄:26 +财产:999.990000 +性别:M
外号:法外狂徒-张三 +年龄:26 +财产:999.99 +性别:M

栗子:

    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "text.txt");
        try {
            System.setIn(new FileInputStream(file));//重定向至文件

            InputStream in = System.in;//然后调用System.in的输入流
            byte[] bytes = new byte[1024];
            int read = in.read(bytes);

            System.out.println(new String(bytes,0,read));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

程序运行结果:

hello
world!12.3true
撒旦静安寺点击
1111111111.99
false

外号:法外狂徒-张三 +年龄:26 +财产:999.990000 +性别:M
外号:法外狂徒-张三 +年龄:26 +财产:999.99 +性别:M

setOut(PrintStream out)

重定向标准输出,从输出到屏幕更改至文件。

D:\IOtest\text.txt内:

hello
world!12.3true
撒旦静安寺点击
1111111111.99
false

外号:法外狂徒-张三 +年龄:26 +财产:999.990000 +性别:M
外号:法外狂徒-张三 +年龄:26 +财产:999.99 +性别:M

栗子:

    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "text.txt");
        try {
            System.setOut(new PrintStream(new FileOutputStream(file, true), true));
            System.out.println();//先输出换行符
            System.out.println("asdjiasi 阿斯近代史低价");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

程序运行后,D:\IOtest\text.txt内:

hello
world!12.3true
撒旦静安寺点击
1111111111.99
false

外号:法外狂徒-张三 +年龄:26 +财产:999.990000 +性别:M
外号:法外狂徒-张三 +年龄:26 +财产:999.99 +性别:M
asdjiasi 阿斯近代史低价

setErr(PrintStream err)

重定向错误输出,从输出屏幕更改到文件。
栗子:

    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "text.txt");
       String s="hello";
        try {
            System.setErr(new PrintStream(file));
            Integer.parseInt(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

D:\IOtest\text.txt内:

java.lang.NumberFormatException: For input string: "hello"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at moudle2.Test12.main(Test12.java:12)

没追加,直接覆盖

标签:Java,拾贝,System,static,File,new,第十二天,public,out
From: https://www.cnblogs.com/Ocraft/p/17792116.html

相关文章

  • Java基础 多线程的实现方式——继承 Thread 类的方式
    多线程的三种实现方式:1.继承Thread类的方式进行实现2.实现Runnable接口的方式进行实现3.利用Callable接口和Future接口方式实现 一、继承Thread类的方式:将类声明为Thread的子类,该子类应重写Thread类的run方法,接下来可以创建子类的对象并启动线程。在......
  • JavaScript 中的this
    在JavaScript中,this关键字的行为使其有别于其他编程语言。与某些语言在编译时确定的不同,在JavaScript中,它是根据函数的调用方式在运行时动态绑定的。这意味着每次调用该函数时this的值都会有所不同。函数上下文类上下文 回调构造函数等用到......
  • JavaScript 数组存储方式及对象
    一、数组的存储1、当声明一个变量时,vara=111;在后台计算机翻译时,var声明a变量所以此时会产生一个栈内存,变量a的初始值为undefined,然后=111;undefined消失,111的值被赋值给了a。如果多个变量赋值的话,栈内存的执行顺序是先进后出的顺序。也叫做压栈。栈内存属于基础数据......
  • tus java client 使用以及问题说明
    代码来自官方参考,支持在使用的时候发现了一些问题记录下参考代码App.javapackageorg.example;importio.tus.java.client.*;importjava.io.File;importjava.io.IOException;importjava.net.URL;importjava.util.HashMap;importjava.util.Map;publicclassApp{......
  • Java零基础入门-包装类
    前言Java是一种广泛使用的面向对象编程语言,它通过JVM(Java虚拟机)来实现跨平台。如果您刚刚开始学习Java编程语言,那么您可能会发现Java中的包装类是一个挑战。本文将对Java中的包装类进行详细介绍,以帮助您更好地理解Java编程语言。摘要在Java编程语言中,包装类用于将基本数据类型转......
  • 直播软件源码,java数据分页几种方式
    直播软件源码,java数据分页几种方式1.使用PageUtils Service: /**   *分页查询   *   *@paramparams查询条件   *@returnPageUtils   */  PageUtilsqueryPage(Map<String,Object>params);   ServiceImpl: Page<数据库对象实体>pa......
  • 一步步带你剖析Java中的Reader类
    本文分享自华为云社区《深入理解Java中的Reader类:一步步剖析》,作者:bug菌。前言在Java开发过程中,我们经常需要读取文件中的数据,而数据的读取需要一个合适的类进行处理。Java的IO包提供了许多类用于数据的读取和写入,其中Reader便是其中之一。本文将对Java中的Reader进行详细介绍,并......
  • java实现简易计算器
    Java简易计算器用java语言写的一个简易计算器,实现了最基本的+、-、*、/运算。先来看下效果:界面简述:整个面板的由一个JTextFiled组件+16个JButton组件构成,外加一个JPanel组件存放16个按钮,其布局为4x4的网格布局(GridLayout)。显示框与按钮面板放在了整个面板容器中,布局为BorderL......
  • javaweb--约束
    作用作用于表中列上的规则,用于限制加入表的数据约束的存在用于保证数据库中数据的完整性、有效性、正确性。约束的分类: auto_increment自增此列插入新一条数据时数值自动+1altertable表名modify列名数据类型约束 外键约束constraint外键名foreignkey外键列名......
  • Java大文件上传(秒传、分片上传、断点续传)
    一、秒传秒传就是不传,实现逻辑就是看数据库或者缓存里是否已经有这个文件了,有了,直接从已有的文件去拿就可以了(返回文件地址)。这里判断是否是相同文件,要用到信息摘要算法,详情可以参考:一文读懂当前常用的加密技术体系。信息摘要算法常常被用来保证信息的完整性,防止信息在传输过程中被......