`
k_lb
  • 浏览: 834067 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

Java System 类对ID 的支持

 
阅读更多

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-getDisk.rar_Java 获取主板ID_java获取电脑ID

    在Java编程语言中,获取计算机硬件信息,如主板ID(也称为系统UUID)和硬盘分区编号,是一项常见的任务,尤其在系统管理和软件授权等领域。以下将详细解释如何使用Java实现这些功能。 首先,主板ID是计算机主板上的...

    java自动生成id策略

    在Java编程中,自动生成ID是一项常见的需求,特别是在...综上所述,"java自动生成id策略"涉及到对时间戳和随机数的结合使用,以确保ID的唯一性和效率。实际应用中,还需要根据业务需求和系统规模选择适合的ID生成策略。

    java语言生成唯一ID的方法

    本文将详细解析一个具体的Java类——`UniqId`,它用于生成唯一ID。该类通过结合当前时间戳、随机数、主机地址及线程ID来确保ID的唯一性,适用于多种场景。 #### UniqId类详解 ##### 基本结构 `UniqId`类主要由...

    java 使用类作为成员变量

    在Java编程语言中,类作为成员变量是一种常见的设计模式,它允许我们将一个对象实例嵌套在另一个类的内部,以此来实现数据封装和模块化。这种做法有助于组织代码,提高可读性和可维护性。下面将详细介绍如何在Java中...

    Java -核心类库 Object类常方法 Math类常用方法 System类常用方法 基本类型包装类常用方法等

    2. **Calendar 类**:更高级的日期时间类,支持更多的日期时间操作。 3. **LocalDate/LocalTime/LocalDateTime 类**:从Java 8开始引入的新API,提供了更为简洁和易于使用的日期时间操作方式。 通过上述知识点的...

    JAVA类的定义txt格式

    根据提供的文件信息,我们可以深入探讨Java类的基本定义与构造,以及如何在Java中定义一个类、类中的属性、构造函数、方法等基本概念。 ### Java类的定义 Java是一种面向对象的编程语言,其核心是类(Class)的...

    javaID生成器javaID生成器

    此外,由于不同的数据库管理系统(如 Oracle、MySQL 等)对 ID 生成机制的支持不尽相同,因此实现一个跨平台、可移植性强的 ID 生成方案显得尤为重要。 #### 三、设计方案 本节将详细介绍文中提到的 Java ID 生成...

    关于java的类机制

    标题是“关于Java的类机制”,但描述及部分内容并未提及任何有关Java或类机制的信息,而是涉及了一些难以理解的内容,似乎与音乐或者某种情感体验相关。鉴于此,我们将依据标题要求,围绕Java的类机制展开详细的知识...

    java 类与对象代码

    在给定的代码中,很可能实现了学生类和链表类的交互,例如创建一个链表来存储学生对象,或者通过链表操作对学生进行排序等。具体实现方式将取决于实际的代码内容。 通过分析和运行这些代码,我们可以学习到如何在...

    java员工类

    System.out.println("Employee " + id + " is working."); } } ``` 这个类定义了员工的基本属性和工作方法。如果需要,可以为它添加更多的功能,如增加薪资、请假等方法。而`Employee`作为标签,表明了这个类在...

    java的类和对象.docx

    ### Java的类和对象知识点详解 #### 一、Java中的类与对象概念 **1....以上是对Java中类和对象的基础概念及其使用方法的详细介绍。理解和掌握这些基本概念对于学习更高级的Java编程技术至关重要。

    protobuf java代码生成

    Java作为广泛使用的编程语言之一,protobuf提供了对Java的良好支持。本篇文章将详细探讨protobuf在Java中的代码生成过程。 首先,我们需要理解protobuf的基本概念。一个`.proto`文件是protobuf的数据结构定义,它...

    [Android][frameworks][HIDL]使用HIDL新建虚拟HAL以实现system_server与native进程双向通信(三)——JAVA客户端

    首先先解释下一个“玄学”的情况:在前两章的操作完成后,我们不需要添加任何JAVA类,即可直接使用; 究其原因,是因为在我们之前使用hidl-gen的时候,生成的Android.bp中包含这个字段: hidl_interface { ... ...

    Elasticsearch的JAVA操作工具类,包括增删改查的封装

    本文将详细介绍如何构建一个封装了基本增删改查功能的Elasticsearch Java工具类。 首先,我们需要引入Elasticsearch的Java客户端依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....

    java dll 得到cpu id

    在实现过程中,我们先要在C++的DLL中编写获取CPU ID的函数,然后在Java端使用JNI定义对应的native方法,并通过`System.loadLibrary`加载DLL。当Java调用这个native方法时,实际会执行DLL中的相应函数,从而获取CPU ...

    java 通过jni接口获取当前机器硬盘ID(序列号)

    Java 通过JNI(Java Native Interface)接口获取当前机器硬盘ID,即序列号,是一种混合编程技术,它允许Java代码调用本地系统库,如DLL(动态链接库)来执行特定的系统级任务,这些任务在Java标准库中可能无法直接...

    Java对象和类 最详细说明

    ### Java对象和类 最详细说明 #### 一、Java中的对象 在面向对象编程中,对象是核心概念之一。对象可以被理解为现实世界中事物的抽象表示,它具有特定的状态(属性)和行为(方法)。例如,一辆汽车可以被视为一个...

    java 类的相关代码

    本次实验旨在通过具体示例加深对Java面向对象编程中类的继承以及接口的理解。通过实验,学生可以掌握如何定义类、继承父类、重写方法以及如何实现接口。下面将详细介绍本次实验涉及到的主要知识点。 #### Person 类...

    ID3算法Java实现

    本篇文章将深入探讨ID3算法的原理,并提供一个用Java实现的详细示例。 ID3算法的核心思想是信息熵和信息增益。熵是用来衡量一个集合纯度的指标,信息增益则是选择最优属性的标准。在构建决策树的过程中,ID3算法会...

    java生成唯一id(uuid)(不依赖jdk5,自己实现的)

    在Java编程中,生成唯一的ID(Universal Unique Identifier,UUID)是一项常见的需求,特别是在数据库记录、分布式系统中的对象标识等方面。UUID是一种128位的数字,通常以32个字符的16进制形式表示,确保在全球范围...

Global site tag (gtag.js) - Google Analytics