您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第12章:JAVA IO】_System类对IO的支持
发布时间:2020-12-28 18:04:25编辑:雪饮阅读()
System.out其实也走的是输出流
import java.io.OutputStream;
import java.io.IOException;
public class Hello{
public static void main(String args[]) throws Exception{
OutputStream out=System.out;
try{
out.write("hello kasumi!!!".getBytes());
out.close();
}
catch(IOException e){
e.printStackTrace();
}
}
};
System.err错误输出
public class Hello{
public static void main(String args[]) throws Exception{
String str="hello kasumi";
try{
System.out.println(Integer.parseInt(str));
}
catch(Exception e){
System.err.println(e);
}
}
};
D:\>javac Hello.java
D:\>java Hello
java.lang.NumberFormatException: For input string: "hello kasumi"
其实我觉得在这里用System.err和用System.out其实都是一回事,反正都是走的toString
public class Hello{
public static void main(String args[]) throws Exception{
String str="hello kasumi";
try{
System.out.println(Integer.parseInt(str));
}
catch(Exception e){
System.out.println(e);
}
}
};
D:\>javac Hello.java
D:\>java Hello
java.lang.NumberFormatException: For input string: "hello kasumi"
System.in字节输入流
System.in字节输入流是可以接收来自键盘输入内容的字节输入流。
import java.io.InputStream;
public class Hello{
public static void main(String args[]) throws Exception{
InputStream input=System.in;
byte b[]=new byte[1024];
System.out.print("请输入内容:");
int len=input.read(b);
System.out.println("输入的内容为:"+new String(b,0,len));
input.close();
}
};
D:\>javac Hello.java
D:\>java Hello
请输入内容:cute
输入的内容为:cute
当输入内容长度大于用于接收输入流的字节数组时则超过字节数组长度部分的会被截取掉不会输出。
import java.io.InputStream;
public class Hello{
public static void main(String args[]) throws Exception{
InputStream input=System.in;
byte b[]=new byte[5];
System.out.print("请输入内容:");
int len=input.read(b);
System.out.println("输入的内容为:"+new String(b,0,len));
input.close();
}
};
D:\>javac Hello.java
D:\>java Hello
请输入内容:my name is kasumi
输入的内容为:my na
同样可以利用while结合流尾判断实现无限制输入
import java.io.InputStream;
public class Hello{
public static void main(String args[]) throws Exception{
InputStream input=System.in;
StringBuffer buf=new StringBuffer();
System.out.print("请输入内容:");
int temp=0;
while((temp=input.read())!=-1){
char c=(char)temp;
buf.append(c);
}
System.out.println("输入的内容为:"+buf);
input.close();
}
};
D:\>javac Hello.java
D:\>java Hello
请输入内容:my name is hayabusa
输入的内容为:my name is hayabusa
这次回车不能使得被程序直接执行到结束,回车被设定为输入中的回车,所以要终止就通过ctrl+回车
System.setOut输出重定向设置
System.setOut可以设定java系统输出重定向
默认情况下java系统输出都是在屏幕中(java命令行/控制台),但可以通过System.setOut将其修改到文件中等其它输出。
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class Hello{
public static void main(String args[]) throws Exception{
System.setOut(new PrintStream(new FileOutputStream("d:"+File.separator+"kasumi.txt")));
System.out.print("www.kasumi.com");
System.out.print(",kasumi");
}
};
D:\>javac Hello.java
D:\>java Hello
利用此特性则可以应用于出现异常后给用户更好的体验,而“异步”到后台将日志另外写入到文件中。
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class Hello{
public static void main(String args[]) throws Exception{
String str="hello kasumi";
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);
}
}
};
D:\>javac Hello.java
D:\>java Hello
System.setErr设定错误重定向
默认情况下异常这类错误如果没有显式捕获处理,则会抛出到JVM上,即默认错误输出在JVM上。System.setErr可以将错误输出重定向比如内存等中。
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
public class Hello{
public static void main(String args[]) throws Exception{
ByteArrayOutputStream bos=new ByteArrayOutputStream();
System.setErr(new PrintStream(bos));
System.err.print("www.kasumi.com");
System.err.println(",kasumi");
System.out.println(bos);
}
};
ByteArrayOutputStream字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。所以错误重定向到内存中了,如果不用System.out进行输出则JVm控制台不会有任何东西,即便上面前面的案例里面可以看到System.err和System.out效果相同,但是由于当前System.err已经被错误重定向了。
D:\>javac Hello.java
D:\>java Hello
www.kasumi.comkasumi
System.setIn输入重定向设置
System.setIn可以将修改java系统的输入流,System.in默认设定是接收来自键盘输入的输入流,那么可以设定成接收从一个指定文件中的内容当作是输入流等。
import java.io.FileInputStream;
import java.io.File;
import java.io.InputStream;
public class Hello{
public static void main(String args[]) throws Exception{
System.setIn(new FileInputStream("d:"+File.separator+"kasumi.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();
}
};
D:\>javac Hello.java
D:\>java Hello
输入的内容为:www.kasumi.com,kasumi
关键字词:java,IO,流