System类的作用
- System 类提供了标准输入、标准输出和错误输出流。
- 对外部定义的属性和环境变量的访问。
- 加载文件和库的方法。
- 还有快速复制数组的一部分的实用方法。
了解System.in 、 System.out 、System.err
它们都属于System类的静态变量。
- System.in 标准输入流(从键盘输入)
- System.out 标准输出流 (输出到控制台)
- System.err 标准错误输出流(输出的字体颜色是红色)
代码演示System.in:
//把标准输入作为扫描的数据源
Scanner sc = new Scanner(System.in);
//将标准输入作为数据源
BufferedReader bis = new BufferedReader(
new InputStreamReader(System.in));
代码演示System.out:
System.out是一个PrintStream(打印流),所以System.out.println()就是调用打印流中的println()方法。
//简单使用System.out
System.out.print("ABC");//不换行
System.out.println("DEF");//换行
//对System.out进行包装处理
Writer bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("完成控制台输出");
bw.append("OKOKOKOKOK"); //等效于print()
bw.flush();//刷出缓冲区
上面代码中将System.out进行包装后,也能达到打印流中的效果,但功能一般,所以这里了解就好。
代码演示System.err:
System.
public class Test {
public static void main(String[] args) throws IOException {
System.err.println("使用System.err");
BufferedWriter bwt = new BufferedWriter(new OutputStreamWriter(System.err));
bwt.write("和System.out有啥不同");
bwt.flush();
}
}
System.err输出的字体颜色是红色,最常见到的就是打印异常信息时,都是红色,就是使用该流来打印的。
System对标准流进行重定向:
原来的标准流默认是键盘输入和输出到控制台,重定向则是分配标准流,表示可以使用别的流作为标准。
方法如下:
- static voidsetIn(InputStream in)
- static void setOut(PrintStream ps)
- static void setErr(PrintStream ps)
代码演示setIn的作用:
//未对System.in进行重定向
public static void unSetIn() {
Scanner sc = new Scanner(System.in);
//判断是否有下一个输入项
while(sc.hasNext()) {
String s = sc.next();
if(s.equalsIgnoreCase("end")) break; //结束判断
System.out.println(s);
}
}
//使用重定向之后
public static void setInTest() throws FileNotFoundException {
//创建一个输入流
FileInputStream fis = new FileInputStream("D:\\MoreObject.txt");
//将该流重定向为标准输入
System.setIn(fis);
Scanner sc2 = new Scanner(System.in);
String s = null;
while(sc2.hasNext()) {
//控制台输出的内容是fis对象中的文件内容
System.out.println(sc2.next());
}
}
重定向System.in之前,以键盘作为标准输入,从控制台输入数据就在控制台打印数据。
重定向后,指向一个输入流,该流作为标准输入,所以控制台输出的是重定向的流指向的文件内容。
代码演示setOut的作用:
因为setErr和setOut使用方式一样,所以省略setErr。public class Test2 {
public static void main(String[] args) throws FileNotFoundException {
System.out.println("打印在控制台~~");
//true:不会覆盖目标文件内容
FileOutputStream fos = new FileOutputStream("F:\\setOutTest.txt",true);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
//使用System.out
// System.out.println("输出到哪里了1");
// System.out.println("输出到哪里了2");
// System.out.println("输出到哪里了3");
//该方法会覆盖内容,所以需要fos对象设置允许追加内容
// System.out.append("");
}
}
未重定向之前,输出内容到控制台。重定向后,输出内容到指定文件中。
需要注意,执行输出操作默认对目标文件内容进行覆盖,所以节点流连接数据源时,可以根据需求设置是否允许附加内容。
Systeml类的常用方法:
static long currentTimeMillis() | 返回以毫秒为单位的当前时间。 |
static void exit(int status) | 终止当前正在运行的 Java 虚拟机。 |
static Properties getProperties() | 获取当前系统的所有属性。 |
static String getProperty(String key) | 获取指定键指示的系统属性。 |
static int identityHashCode(Object x) | 返回给定对象的原始哈希码Hashcode() |
static void load(String filename) | 从动态库的本地文件中以指定的文件名加载代码文件。 |
static void loadLibrary(String libname) | 加载由 libname 参数指定的系统库。 |
static void setProperties(Properties props) | 将系统属性设置为 Properties 参数。 |
static String setProperty(String key, String value) | 设置指定键指示的系统属性。 |
static void setSecurityManager(SecurityManager s) | 设置系统安全性。 |
static long nanoTime() | 返回最准确的可用系统计时器的当前值,以毫微秒为单位 |
static String getenv(String name) | 获取指定的环境变量值。 |
static void gc() | 运行垃圾回收器。 |