OutputStreamWriter
1: class OutputStreamWriterDemo
2: {
3: public static void main(String[] args)
4: {
5: //键盘录入
6: InputStream in=System.in;
7: InputStreamReader isr=new InputStreamReader(in);
8: BufferedReader bufr=new BufferedReader(isr);
9:
10: OutputStream out=System.out;
11: //将输出语句变成字符流对象,可以直接操作字符串和使用BufferedWriter
12: OutputStreamWriter osw=new OutputStreamWriter(out);
13: BufferedWriter bufw=new BufferedWriter(osw);
14:
15: String line=null;
16: while((line=bufr.readLine())!=null)
17: {
18: if("over".equals(line))
19: break;
20: bufw.write(line.toUpperCase());
21: bufw.newLine();
22: bufw.flush();
23: }
24:
25: bufw.close();
26: bufr.close();
27:
28:
29: }
30: }
31:
如果需求是将键盘录入的数据存储到一个文件中去,代码如下:
1:
2: //键盘录入
3: BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
4:
5: //存储到文件中去
6: BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));
如果需求是将文件中的打印到控制台上,代码如下:
1: BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("文件名.txt")));
2:
3:
4: BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
5:
流操作的基本规律:
<1>要明确源和目的
源:输入流 InputStream和Reader
目的:输出流 OutputStream和Writer
<2>明确操作的数据是否为纯文本
如果是纯文本的话,字符流,不是纯文本的话,使用字节流
<3>当体系明确后,在明确使用哪个具体的对象
通过设备来区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
例如:需求为将键盘录入的数据保存到一个文件中去
分析如下:
源 : InputStream Reader
是不是纯文本? 是,那么使用Reader
设备为键盘,对应的对象是System.in,但是通过以上分析,应该使用Reader呀,System.in对应的是字节流呀。为了操作键盘中的文本数据最方便,转换成字符流按照字符串的操作最方便。因此将System.in转换成Reader。用Reader体系中的转换流InputStreamReader。
1: InputStreamReader isr=new InputStreamReader(System.in);
是否需要提高效率呢?需要,那么使用BufferedReader
1: BufferedReader bufr=new BufferedReader(isr);
目的:OutputStream Writer
是否为纯文本呢?是。Writer
设备为硬盘上的一个文件,FileWriter
1: FileWriter fw=new FileWriter("c.txt");
是否需要提高效率呢?是。使用BufferedWriter
1: BufferedWriter bufw=new BufferedWriter(fw);
扩展:如果想要将录入的数据按照指定的编码表(UTF-8)来存储到文件中去
思考:只有转换流可以使用编码表。所以应该使用OutputStreamWriter对象,又因为该转换流对象要接收一个字节输出流,可以操作文件的字节输出流为FileOutputStream
1: OutputStreamWriter osw=new OutPutStreamWriter(new FileOutputStream("d.txt")),"UTF-8");
2:
3: BufferedWriter bufw=new BufferedWriter(osw);
转换流是字符和字节之间的桥梁,通常,涉及到字符编码转换时,需要使用到转换流。
改变标准输入输出流:
1: public static void main(String[] args)throws IOException
2: {
3: //将标准的键盘输入改为从PersonDemo.java文件中读取数据
4: System.setIn(new FileInputStream("PersonDemo.java"));
5:
6: //将标准的控制台输出改为把数据存储到zzz.txt文件中去
7: System.setOut(new PrintStream("zzz.txt"));
8:
9: BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
10:
11: BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
12: String line=null;
13:
14: while((line=bufr.readLine())!=null)
15: {
16: if("over".equals(line))
17: break;
18: bufw.write(line.toUpperCase());
19: bufw.newLine();
20: bufw.flush();
21: }
22:
23: bufr.close();
24: bufw.close();
25: }
26:
异常的日志信息:
1:
2: public static void main(String[] args)throws IOException
3: {
4: try
5: {
6: int[] arr=new int[2];
7: System.out.println(arr[3]);
8: }
9: catch (Exception e)
10: {
11: try
12: {
13: Date d=new Date();
14: SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
15: String s=sdf.format(d);
16:
17: PrintStream ps=new PrintStream("exeception.log");
18: ps.println(s);
19: System.setOut(ps);
20: }
21: catch (IOException ex)
22: {
23: throw new RuntimeException("日志文件创建失败");
24: }
25:
26: e.printStackTrace(System.out);
27: }
28: }
29:
SimpleDateFormat 它允许进行格式化(日期---文本),解析(文本---日期)和规范化。
printStackTrace 是Throwable类下的方法,将此throwable及其追踪输出到指定的输出流。
1: e.printStackTrace(System.out);
2:
3: System.setOut(new PrintStream(“文件名”));
4:
将异常内容输出到该文件中,也可以写成:
1: e.printStackTrace(new PrintStream("文件名"));
系统信息:
1: public static void main(String[] args)
2: {
3: Properties prop=System.getProperties();
4:
5: prop.list(new PrintStream("文件名"));
6: }