-
java笔记八:IO流之字符流与字符缓冲流
添加时间:2013-5-9 点击量:java中字符流首要都是持续于Reader和Writer两个抽象类。用于对字符文本的读写操纵。
一、转换类流
1 package com.iotest;
2
3 import java.io.FileInputStream;
4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStreamReader;
8 import java.io.OutputStreamWriter;
9
10 public class ConverseStreamDemo {
11
12 public static void main(String[] args) {
13 String s = F:\\shar\\test\\test3.txt;
14 try {
15 //将字节俭转为字符流
16 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(s));
17 osw.write(中国北京);
18 System.out.println(osw.getEncoding());
19 osw.close();
20 osw = new OutputStreamWriter(new FileOutputStream(s,true),GB2312);
21 osw.write(中国北京);
22 System.out.println(osw.getEncoding());
23 osw.close();
24 } catch (FileNotFoundException e) {
25 // TODO Auto-generated catch block
26 e.printStackTrace();
27 } catch (IOException e) {
28 // TODO Auto-generated catch block
29 e.printStackTrace();
30 }
31 try {
32 //将字节俭转为字符流
33 InputStreamReader isr = new InputStreamReader(new FileInputStream(s),GB2312);
34 int c;
35 while((c=isr.read()) != -1){
36 System.out.print((char)c);
37 }
38 System.out.println();
39 isr.close();
40 } catch (FileNotFoundException e) {
41 // TODO Auto-generated catch block
42 e.printStackTrace();
43 } catch (IOException e) {
44 // TODO Auto-generated catch block
45 e.printStackTrace();
46 }
47 }
48
49 }
二、FileReader和FileWriter
1 package com.iotest;
2
3 import java.io.FileNotFoundException;
4 import java.io.FileReader;
5 import java.io.FileWriter;
6 import java.io.IOException;
7 /
8 应用flush()将流数据刷到目标里,这时流还存活着,还可以持续应用该流进行此外操纵。
9 close()固然也有flush()的结果真则这时流已经死了,你若是想持续应用流的话就必须在此建树流
10 /
11 public class MutiplicationTable {
12
13 public static void main(String[] args) throws IOException {
14 String s = F:\\shar\\test\\test5.txt;
15 FileWriter fw = new FileWriter(s);
16 FileReader fr = new FileReader(s);
17 for (int i = 1; i <= 9; i++) {
18 for (int j = 1; j <= i; j++) {
19 String str = i + + j + = + ij + ;
20 fw.write(str);
21 }
22 fw.write(\r\n);
23 /flush是指强行将输出流中的数据写到文件里面去。若是写到这里的话就是一行一行的写入文件
24 好每写完一项目组就刷新一次,若是最后刷新的话可能会造成数据的丧失
25 /
26 fw.flush();
27 }
28 //若是又不写flush()又不写close(),则不会写入任何内容到文本里。只是写到了缓冲区
29 //fw.flush(); 写到这里的话就是所有的内容一路写进文件
30 //fw.close(); close之前会调用flush()
31 //读字符输入流的数据
32 int c;
33 while ((c=fr.read())!=-1) {
34 System.out.print((char)c);
35 }
36 }
37
38 }
三、BufferedReader和BufferedWriter
1 package com.iotest;
2
3 import java.io.BufferedOutputStream;
4 import java.io.BufferedWriter;
5 import java.io.FileOutputStream;
6 import java.io.FileWriter;
7 import java.io.IOException;
8
9 public class PrimeNumber {
10 BufferedWriter bw = null;
11 String fileName = F:\\shar\\test\\test7.txt;
12 //断定是否是质数
13 public boolean isPrime(int n){
14 for(int i=2;i<=n/2;i++){
15 if(n%i == 0){
16 return false;
17 }
18 }
19 return true;
20 }
21 void printPrime(int m) throws IOException{
22 //将字节俭转缓冲流
23 bw = new BufferedWriter(new FileWriter(fileName));
24 int j = 0;
25 for (int i = 2; i < m; i++) {
26 if(isPrime(i)){
27 j++;
28 String s = String.valueOf(i);
29 String s1 = s + ;
30 bw.write(s1); //写入文本文件
31 if(j==10){
32 j = 0;
33 bw.newLine(); //写入一个行分隔符
34 bw.flush(); //强迫刷新
35 }
36 }
37 }
38
39 bw.close();
40 }
41 public static void main(String[] args) throws IOException {
42 PrimeNumber pn = new PrimeNumber();
43 pn.printPrime(100);
44 }
45
46 }
四、PrintWriter1 package com.iotest;
2
3 import java.io.FileWriter;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6
7 public class PrintWriterDemo {
8
9 public static void main(String[] args) throws IOException {
10 int A = 0; //千位
11 int B = 0; //百位
12 int C = 0; //十位
13 int num = 0;
14 String fileName = F:\\shar\\test\\test8.txt;
15 FileWriter fw = new FileWriter(fileName); //字符输出流
16 PrintWriter pw = new PrintWriter(fw); //将字节输出流转为PrintWriter
17 for (int i = 1000; i < 10000; i++) {
18 A = i/1000;
19 B = i/100 % 10;
20 C = i/10 % 10;
21 if(i%11==0 && A == B+C){
22 pw.print(i+ );
23 if(++num % 7 == 0){
24 pw.println(); //写入回车换行
25 pw.flush(); //强迫刷新流
26 }
27 }
28 }
29 fw.close();
30
31 }
32
33 }五、标准IO
1 package com.iotest;
2
3 import java.io.BufferedReader;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.io.PrintWriter;
8 import java.util.Scanner;
9
10 public class PackStardIO {
11
12 public static void main(String[] args) throws IOException {
13 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14 PrintWriter o = new PrintWriter(System.out); //包装标准输出
15 String s;
16 while((s=br.readLine())!=null && s.length()!=0){
17 o.println(s.toUpperCase());
18 //o.flush(); //必然要强迫刷新让其输出来,不然不会输出
19 }
20 }
21
22 }
1 package com.iotest;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.BufferedReader;
6 import java.io.FileInputStream;
7 import java.io.FileNotFoundException;
8 import java.io.FileOutputStream;
9 import java.io.IOException;
10 import java.io.InputStreamReader;
11 import java.io.PrintStream;
12
13 public class StandardIORedirect {
14
15 public static void main(String[] args) throws IOException {
16 PrintStream console = System.out;
17 BufferedInputStream in = new BufferedInputStream(new FileInputStream(C:\\Documents and Settings\\01\\桌面\\Test\\src\\com\\iotest\\StandardIORedirect.java));
18 PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream(F:\\shar\\test\\test9.txt)));
19 System.setIn(in); //对标准输入流重定向
20 System.setOut(out);
21 System.setErr(out);
22 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
23 String s;
24 while((s=br.readLine())!=null){ //从BufferedReader中读取一行数据
25 System.out.println(s);
26 }
27 out.close();
28 System.setOut(console);
29 }
30
31 }
六、随即接见文件类1 package com.iotest;
2
3 import java.io.FileNotFoundException;
4 import java.io.IOException;
5 import java.io.RandomAccessFile;
6
7 public class RandomRW {
8 public static void main(String[] args) throws IOException {
9 RandomAccessFile raf = new RandomAccessFile(F:\\shar\\test\\test10.dat,rw);
10 final int DOUBLE_SIZE = 8;
11 for (int i = 0; i < 10; i++) {
12 raf.writeDouble(i);
13 System.out.print( + (double)i);
14 }
15 System.out.println();
16 raf.close();
17 RandomAccessFile raf1 = new RandomAccessFile(F:\\shar\\test\\test10.dat,rw);
18 raf1.seek(3DOUBLE_SIZE); //找到某个地位
19 raf1.writeDouble(300); //往该地位插入数据
20 raf1.seek(5DOUBLE_SIZE);
21 raf1.writeDouble(500);
22 raf1.close();
23 RandomAccessFile raf2 = new RandomAccessFile(F:\\shar\\test\\test10.dat,r);
24 for (int i = 0; i < 10; i++) {
25 System.out.print( +raf2.readDouble());
26 }
27 raf2.close();
28 }
29
30 }
原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#