【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() ; // 关闭输入流
}
};
相关文章推荐
- 【JAVA IO】_System类对IO的支持笔记
- 12. JAVA IO Party 2 (内存操作流、管道流、打印流、System类对IO的支持) ----- 学习笔记
- java中System类对IO的支持
- Java IO学习笔记(八):System类对IO的支持
- Java中的io笔记
- Java IO学习笔记+代码
- Java基础视频笔记(七):IO操作
- JAVA.IO使用笔记
- Java IO学习笔记+代码(3)
- Java IO学习笔记:概念原理
- 传智博客学习笔记12--JAVA IO
- Java IO学习笔记+代码(3)
- Java IO学习笔记:字符流
- java中的io笔记
- Java IO部分的学习笔记
- JAVA自学笔记(六) JAVAIO
- Java IO 实现文件复制 -Java 学习笔记 (25)
- Java IO学习笔记+代码(2)
- Java IO学习笔记:字节流
- java_croe 学习笔记之新IO---java.nio 之内存映射文件