您的位置:首页 > 编程语言 > Java开发

【JAVA IO】_System类对IO的支持笔记

2014-10-01 23:31 357 查看


【JAVA IO】_System类对IO的支持笔记

分类: Java

【JAVA IO】_System类对IO的支持笔记

本章目标:

掌握System对IO的三种支持:

System.out

System.err

System.in

掌握System.out及System.err的区别

掌握输入、输出重定向

System类的常量

System表示系统类,此类在之前讲解java常用类库的时候就已经为读者介绍过了,实际上在java中System类也对IO给予了一定的支持。

No. System类的常量 描述

1 public static final PrintStream out 对应系统标准输出,一般是显示器

2 public static final PrintStream err 错误信息输出

3 public static final InputStream in 对应着标准输入,一般是键盘

3.1、System.out

使用System.out输出的时候就是将输出的位置定义在了显示器之中。

FileOutputStream是定位在文件里,而System.out是定位在屏幕上。

使用OutputStream完成屏幕上输出。

PrintStream就是OutputStream的子类

下面的实例真正体现了啥叫流的概念。

[java] view
plaincopyprint?

import java.io.OutputStream;

import java.io.IOException;

public class SystemDemo01{

public static void main(String args[]){

OutputStream out = System.out; //此时的输出流是向屏幕上输出

try{

out.write("hello world!!!".getBytes());

}catch(IOException e){

e.printStackTrace();

}

try{

out.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

很明显就是对象多态性的体现,根据实现的子类不同,完成的功能也不同。

3.2、System.err

System.err表示的是错误的标准输出,如果程序中出现了错误的话,则直接使用System.err进行打印输出即可。

[java] view
plaincopyprint?

public class SystemDemo02{

public static void main(String[] args){

String str = "hello";

try{

System.out.println(Integer.parseInt(str)); //转型

}catch(Exception e){

System.orr.println(e);

}

}

}

错误信息:java.lang.NumberFormatException:For input string:"hello"

System.out和System.err的区别:

System.out和System.err都是PrintStream的实例化对象,而且通过实例代码可以发现,两者都可以输出错误信息,但是一般来讲System.out是将信息显示给用户看,是正常的信息显示,而System.err的信息正好相反是不希望用户看到的,会直接在后台打印,是专门显示错误的。

一般来讲输出错误信息时最好使用System.err.println()

3.3、System.in

System.in实际上是一个键盘的输入流,其本身是InputStream类型的对象。那么,此时可以利用此方式完成从键盘读取数据的功能。

[java] view
plaincopyprint?

import java.io.InputStream;

public class SystemDemo04{

public static void main(String args[])throws Exception{

InputStream input = System.in;

byte b[] = new byte[1024];

System.out.println("请输入内容");

int len = input.read(b);

System.out.println("输入的内容为:"+new String(b,0,len));

input.close();

}

}

以上程序的问题:

问题一:指定了输入数据的长度,如果现在输入的数据超过了长度范围,则只能输入部分的数据。

问题二:指定的byte数组长度是奇数的话,则还有可能出现中文乱码问题。

只能通过判断标志位的方式完成。

[java] view
plaincopyprint?

import java.io.InputStream ;

public class SystemDemo05{

public static void main(String args[]) throws Exception { // 所有异常抛出

InputStream input = System.in ; // 从键盘接收数据

StringBuffer buf = new StringBuffer() ; // 使用StringBuffer接收数据

System.out.print("请输入内容:") ; // 提示信息

int temp = 0 ; // 接收内容

while((temp=input.read())!=-1){

char c = (char) temp ; // 将数据变为字符

if(c=='\n'){ // 退出循环,输入回车表示输入完成

break ;

}

buf.append(c) ; // 保存内容

}

System.out.println("输入的内容为:" + buf) ;

input.close() ; // 关闭输入流

}

};

此时,没有长度限制,愿意输入多少就输入多少,但是真的可以执行吗?

如果现在输入的是中文呢?

最好的输入方式:

最好的输入方式是将全部输入的数据暂时放到一块内存之中,之后一次性的从内存中读取出数据,这样所有的数据只读了一次,则不会造成乱码,而且也不会受长度的限制。

要想实现以上的功能只能通过BufferedReader类完成。

3.4、输入、输出重定向。

输入、输出重定向可以通过以下方法:

No. 方法或常量 描述

1 public static void setOut(PrintStream out) 重定向“标准”输出流

2 public static void setErr(PrintStream err) 错误输出流

3 public static void setIn(PrintStream in) 输入流

[java] view
plaincopyprint?

import java.io.File ;

import java.io.FileOutputStream ;

import java.io.PrintStream ;

public class SystemDemo06{

public static void main(String args[]) throws Exception {

System.setOut(

new PrintStream(

new FileOutputStream("d:" +

File.separator + "red.txt"))) ; // System.out输出重定向

System.out.print("www.mldnjava.cn") ; // 输出时,不再向屏幕上输出

System.out.println(",李兴华") ;

}

};

[java] view
plaincopyprint?

import java.io.File ;

import java.io.FileOutputStream ;

import java.io.PrintStream ;

public class SystemDemo07{

public static void main(String args[]){

String str = "hello" ; // 声明一个非数字的字符串

try{

System.out.println(Integer.parseInt(str)) ; // 转型

}catch(Exception e){

try{

System.setOut(

new PrintStream(

new FileOutputStream("d:"

+ File.separator + "err.log"))) ; // 输出重定向

}catch(Exception e1){

}

System.out.println(e) ;

}

}

};

[java] view
plaincopyprint?

import java.io.ByteArrayOutputStream ;

import java.io.PrintStream ;

public class SystemDemo08{

public static void main(String args[]) throws Exception{ // 所有异常抛出

ByteArrayOutputStream bos = null ; // 声明内存输出流

bos = new ByteArrayOutputStream() ; // 实例化

System.setErr(new PrintStream(bos)) ; // 输出重定向

System.err.print("www.mldnjava.cn") ; // 错误输出,不再向屏幕上输出

System.err.println("李兴华") ; // 向内存中输出

System.out.println(bos) ; // 输出内存中的数据

}

};

[java] view
plaincopyprint?

import java.io.FileInputStream ;

import java.io.InputStream ;

import java.io.File ;

public class SystemDemo09{

public static void main(String args[]) throws Exception{ // 所有异常抛出

System.setIn(new FileInputStream("d:"

+ File.separator + "demo.txt")) ; // 设置输入重定向

InputStream input = System.in ; // 从文件中接收数据

byte b[] = new byte[1024] ;// 开辟空间,接收数据

int len = input.read(b) ; //接收

System.out.println("输入的内容为:" + new String(b,0,len)) ;

input.close() ; // 关闭输入流

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: