最近用到一些java.io包中的一些类接口,所以写了一些东西来复习。
Input和Output是同一类,而Reader和Writer另属同一类
Reader支持16位的Unicode字符的输出,而InputStream只支持8位字符输出。他们的大概结构如下:
InputStream的子类有:
FileInputStream,FilterInputStream,ObjectInputStream,StringBufferInputStream 等
OutputStream的子类有:
ByteArrayOutputStream,FileOutputStream,FilterOutputStream,PipedOutputStream,ObjectOutputStream。
Reader的子类 有:BufferdReader,InputStreamReader,FilterReader,StringReader,PipedReader,CharArrayReader。
Writer的子类有: BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter。
曾遇到一个面试题:
请选择下面的这却答案:
a. System.out 是一个PrintStream。
b. System.out 是一个OutputStream。
c. System.out 是一个FilterOutputStream。
d. System.out 不是一个PrintStream。
e. System.out 在异常时,将抛出IOExcepton。
由于System.out 是一个PrintStream的一个子类,并且PrintStream对象并没有抛出IOException异常。
所以可以看出答案:a b c
例一:InputStream读取文件的应 用:
Java代码
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
-
- <span style="color: rgb(51, 153, 102);">/**
- *
- * @author liugao ec06 cumt
- *
- */</span>
- public class TestJavaIo {
-
- <span style="color: rgb(51, 153, 102);">/**
- * @param args
- */</span>
- public static void main(String[] args) {
- int b=0;
- long num=0;
- InputStream in=null;
- try {
- in=new FileInputStream("D:/a.txt");
- } catch (FileNotFoundException e) {
- System.out.println("文件找不到");
- System.exit(-1);
- }
- try{
- while((b=in.read()) !=-1){ <span style="color: rgb(51, 153, 102);">//b读取是字符的AI码</span>
- System.out.println((char)b);
- num++;
- }
- in.close();
- System.out.println();
- System.out.println("共读取了" + num + " 个字节");
-
- }catch(IOException e){
- System.out.println("文件读取错误");
- System.exit(-1);
- }
- }
- }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /** * * @author liugao ec06 cumt * */ public class TestJavaIo { /** * @param args */ public static void main(String[] args) { int b=0; long num=0; InputStream in=null; try { in=new FileInputStream("D:/a.txt"); } catch (FileNotFoundException e) { System.out.println("文件找不到"); System.exit(-1); } try{ while((b=in.read()) !=-1){ //b读取是字符的AI码 System.out.println((char)b); num++; } in.close(); System.out.println(); System.out.println("共读取了" + num + "个字节"); }catch(IOException e){ System.out.println("文件读取错误"); System.exit(-1); } } }
例二:FileReader的应用:
Java代码
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
-
- <span style="color: rgb(51, 153, 102);">/**
- *
- * @author ec06cumt
- *
- */</span>
- public class TestFileReader {
-
- <span style="color: rgb(51, 153, 102);"> /**
- * @param args
- */</span>
- public static void main(String[] args) {
- FileReader fr=null;
- int c=0;
- int ln=0;
- try {
- fr=new FileReader("D:/a.txt");
- while((c=fr.read())!=-1){
- System.out.println((char)c);
- ln++;
- }
- fr.close();
-
- <span style="color: rgb(51, 153, 102);">//主要这里的ln的值,当有中文字符时,一个中文字符还是算一个,
- //但InputStream时就一个中文就两个,由此可以看出Reader和Input的区别< /span>
- System.out.println("共有:"+ln+"个字符");
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- }
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * * @author ec06cumt * */ public class TestFileReader { /** * @param args */ public static void main(String[] args) { FileReader fr=null; int c=0; int ln=0; try { fr=new FileReader("D:/a.txt"); while((c=fr.read())!=-1){ System.out.println((char)c); ln++; } fr.close(); //主要这里的ln的值,当有中文字符时,一个中文字符还是算一个, //但InputStream时就一个中文就两个,由此可以看出Reader和Input的区别 System.out.println("共有:"+ln+"个字符"); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }