System 类中存在三个常量:
No |
常量 |
描述 |
1 |
public static finnal PrintStream out |
表示的是一个标准的输出,输出的位置是显示器 |
2 |
public static final PrintStream err |
表示错误,错误的输出 |
3 |
public static final InputStream in |
表示的是键盘的输入,标准输入 |
System.out
System.out是PrintStream 的实例,常用的方法就是向屏幕上打印信息,当然如果使用System.out的话也可以直接为OutputStream实例化
package org.systemiddemo;
import java.io.IOException;
import java.io.OutputStream;
public class SystemIoDemo01 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
OutputStream output = System.out; //此时具备了向屏幕输出的能力
String str = "Hello";
output.write(str.getBytes()); //输出内容
output.close();
}
}
System.err
System.err 表示错误的输出
package org.systemiddemo;
public class SystemIoDemo02 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Integer.parseInt("hello");
}catch(Exception e){
System.out.println(e);
System.err.println(e);
}
}
}
从代码本身观察不出任何的问题,只有在eclipse 下才会出现红色的字体。实际上对于以上的两个常量要想区分区别,只能从概念上讲:
System.out 一般的信息是愿意展示给用户看的
System.err 一般的信息是不愿意展示给用户看的
System.in
System.in 实际上表示的就是一个键盘的输入,使用此操作,可以完成键盘输入数据的功能
package org.systemiddemo;
import java.io.IOException;
import java.io.InputStream;
public class SystemIoDemo03 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStream input = System.in; //准备键盘输入数据
System.out.print("输入数字:");
byte b[] = new byte[20]; //开辟空间接收内容
int len input.read(b); //接收内容
System.out.println("输出的是:"+new String(b,0,len));
}
}
此时已经实现了键盘输入 的功能,但是此程序中在使用时会存在长度的限制。而且输入中文的时候也会存在问题,那么此时就可以通过另外一种方式,不指定大小,边读边判断是否结束
package org.systemiddemo;
import java.io.IOException;
import java.io.InputStream;
public class SystemIoDemo04 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputStream input = System.in; //准备键盘输入数据
System.out.print("请输入");
int temp = 0 ; //接收内容
StringBuffer str = new StringBuffer();
while ((temp = input.read()) != -1){
char c = (char)temp; //转型
if (c == '\n'){ //判断是否是回车
break; //退出循环
}
str.append(c);
}
System.out.print(str.toString());
}
}
此时,数据读取的时候没有长度限制了。
但是在输入中文的时候无法正确的读取了,因为每次读的是一个字节,应该按照整体读取,那么如果要想完成更好的读取操作,则只能使用后续的BufferedReader类完成
输出、输入重定向
System.out、System.err 都有固定的输出目标不,都是屏幕
System.in 有固定的输入目标,都是键盘
但是在System 类中提供了一系列的输入输出重定向的方法,可以改变System.out、System.err、System.in 的输入输出位置
System.out 重定向:public static void setOut(PrintStream out)
System.err 重定向:public static void setErr(PrintStream err)
System.in 重定向:public static void setIn(InputStream in)
范例:验证输出重定向
package org.systemiddemo;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
public class SystemIoDemo05 {
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"demo.txt");
System.setOut(new PrintStream(new FileOutputStream(file)));
System.out.println("错误输出");
}
}
提示:
之前曾经说过 System.err 是不希望用户看到的,而System.out是希望用户看到的,所以在开发中不建议改变System.err的输出位置,而只建议修改System.out的输出位置
package org.systemiddemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
public class SystemIoDemo06 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"demo.txt");
System.setErr(new PrintStream(new FileOutputStream(file)));
try{
Integer.parseInt("hello");
}catch(Exception e){
System.err.println("错误");
}
}
}
范例:输入重定向
package org.systemiddemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SystemIoDemo07 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"demo.txt");
System.setIn(new FileInputStream(file));
InputStream input = System.in;
byte[] b = new byte[20]; //开辟空间接收内容
int len = 0;
len = input.read(b); //接收内容
System.out.println(new String(b,0,len));
}
}
一般System.in 的操作最好不要去
分享到:
相关推荐
在Java编程语言中,获取计算机硬件信息,如主板ID(也称为系统UUID)和硬盘分区编号,是一项常见的任务,尤其在系统管理和软件授权等领域。以下将详细解释如何使用Java实现这些功能。 首先,主板ID是计算机主板上的...
在Java编程中,自动生成ID是一项常见的需求,特别是在...综上所述,"java自动生成id策略"涉及到对时间戳和随机数的结合使用,以确保ID的唯一性和效率。实际应用中,还需要根据业务需求和系统规模选择适合的ID生成策略。
本文将详细解析一个具体的Java类——`UniqId`,它用于生成唯一ID。该类通过结合当前时间戳、随机数、主机地址及线程ID来确保ID的唯一性,适用于多种场景。 #### UniqId类详解 ##### 基本结构 `UniqId`类主要由...
在Java编程语言中,类作为成员变量是一种常见的设计模式,它允许我们将一个对象实例嵌套在另一个类的内部,以此来实现数据封装和模块化。这种做法有助于组织代码,提高可读性和可维护性。下面将详细介绍如何在Java中...
2. **Calendar 类**:更高级的日期时间类,支持更多的日期时间操作。 3. **LocalDate/LocalTime/LocalDateTime 类**:从Java 8开始引入的新API,提供了更为简洁和易于使用的日期时间操作方式。 通过上述知识点的...
根据提供的文件信息,我们可以深入探讨Java类的基本定义与构造,以及如何在Java中定义一个类、类中的属性、构造函数、方法等基本概念。 ### Java类的定义 Java是一种面向对象的编程语言,其核心是类(Class)的...
此外,由于不同的数据库管理系统(如 Oracle、MySQL 等)对 ID 生成机制的支持不尽相同,因此实现一个跨平台、可移植性强的 ID 生成方案显得尤为重要。 #### 三、设计方案 本节将详细介绍文中提到的 Java ID 生成...
标题是“关于Java的类机制”,但描述及部分内容并未提及任何有关Java或类机制的信息,而是涉及了一些难以理解的内容,似乎与音乐或者某种情感体验相关。鉴于此,我们将依据标题要求,围绕Java的类机制展开详细的知识...
在给定的代码中,很可能实现了学生类和链表类的交互,例如创建一个链表来存储学生对象,或者通过链表操作对学生进行排序等。具体实现方式将取决于实际的代码内容。 通过分析和运行这些代码,我们可以学习到如何在...
System.out.println("Employee " + id + " is working."); } } ``` 这个类定义了员工的基本属性和工作方法。如果需要,可以为它添加更多的功能,如增加薪资、请假等方法。而`Employee`作为标签,表明了这个类在...
### Java的类和对象知识点详解 #### 一、Java中的类与对象概念 **1....以上是对Java中类和对象的基础概念及其使用方法的详细介绍。理解和掌握这些基本概念对于学习更高级的Java编程技术至关重要。
Java作为广泛使用的编程语言之一,protobuf提供了对Java的良好支持。本篇文章将详细探讨protobuf在Java中的代码生成过程。 首先,我们需要理解protobuf的基本概念。一个`.proto`文件是protobuf的数据结构定义,它...
首先先解释下一个“玄学”的情况:在前两章的操作完成后,我们不需要添加任何JAVA类,即可直接使用; 究其原因,是因为在我们之前使用hidl-gen的时候,生成的Android.bp中包含这个字段: hidl_interface { ... ...
本文将详细介绍如何构建一个封装了基本增删改查功能的Elasticsearch Java工具类。 首先,我们需要引入Elasticsearch的Java客户端依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....
在实现过程中,我们先要在C++的DLL中编写获取CPU ID的函数,然后在Java端使用JNI定义对应的native方法,并通过`System.loadLibrary`加载DLL。当Java调用这个native方法时,实际会执行DLL中的相应函数,从而获取CPU ...
Java 通过JNI(Java Native Interface)接口获取当前机器硬盘ID,即序列号,是一种混合编程技术,它允许Java代码调用本地系统库,如DLL(动态链接库)来执行特定的系统级任务,这些任务在Java标准库中可能无法直接...
### Java对象和类 最详细说明 #### 一、Java中的对象 在面向对象编程中,对象是核心概念之一。对象可以被理解为现实世界中事物的抽象表示,它具有特定的状态(属性)和行为(方法)。例如,一辆汽车可以被视为一个...
本次实验旨在通过具体示例加深对Java面向对象编程中类的继承以及接口的理解。通过实验,学生可以掌握如何定义类、继承父类、重写方法以及如何实现接口。下面将详细介绍本次实验涉及到的主要知识点。 #### Person 类...
本篇文章将深入探讨ID3算法的原理,并提供一个用Java实现的详细示例。 ID3算法的核心思想是信息熵和信息增益。熵是用来衡量一个集合纯度的指标,信息增益则是选择最优属性的标准。在构建决策树的过程中,ID3算法会...
在Java编程中,生成唯一的ID(Universal Unique Identifier,UUID)是一项常见的需求,特别是在数据库记录、分布式系统中的对象标识等方面。UUID是一种128位的数字,通常以32个字符的16进制形式表示,确保在全球范围...