JavaIO复习和目录文件的复制
最近用到一些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读取文件的应用:
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的应用:
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();}}}
例三:BufferedReader与BufferWriter的应用:
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * BufferReader和BufferWriter的应用示例 * @author ec06cumt* */public class TestBufferedReader {/** * @param args */public static void main(String[] args) {try {//BuffererReader等就像在原来的字节流的基础上套一个更大的水管,//让出水量更大读取的速度更快。BufferedWriter bw=new BufferedWriter(new FileWriter("D:/aa.txt"));BufferedReader br=new BufferedReader(new FileReader("D://aa.txt"));String s=null;for(int i=0;i<=100;i++){s=String.valueOf(10+(long)(Math.random()*30));bw.write(s);bw.newLine(); //创建一个换行的标记}bw.flush(); //刷新缓冲区域。while((s=br.readLine())!=null){ //readLine 就是水管的一个应用吧System.out.println(s);}bw.close();br.close();} catch (IOException e) {System.out.println("写入错误");}}}
例四:DataStream的应用:
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;/** ** @author ec06cumt * */public class TestDataStream {/** * @param args */public static void main(String[] args) {ByteArrayOutputStream bos=new ByteArrayOutputStream();DataOutputStream dos=new DataOutputStream(bos);try {//dos.writeFloat((float) Math.random());//dos.writeLong((long) Math.random());//dos.writeDouble((double) Math.random());//dos.writeChar((char) Math.random());dos.writeShort((short) Math.random());dos.writeBoolean(true);//注意ByteArrayInputStream的构造方法是参数要是一个数组ByteArrayInputStream bais=new ByteArrayInputStream(bos.toByteArray());DataInputStream dis=new DataInputStream(bais);System.out.println(dis.available());//System.out.println(dis.readDouble());//System.out.println(dis.readInt());//System.out.println(dis.readFloat());//System.out.println(dis.readDouble());//System.out.println(dis.readChar());System.out.println(dis.readShort());System.out.println(dis.readBoolean());bos.close();bais.close();} catch (IOException e) {e.printStackTrace();}}}
例五:ObjectStream的应用
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;/** * 对象的写入和读取 * @author ec06cumt * */public class TestObjectStream {/** * @param args */public static void main(String[] args) {T t=new T();t.k=10;try {FileOutputStream fos=new FileOutputStream("D:/testObjectIo.bak");ObjectOutputStream oos=new ObjectOutputStream(fos);oos.writeObject(t);oos.flush();oos.close();FileInputStream fis=new FileInputStream("D:/testObjectIo.bak");ObjectInputStream bis=new ObjectInputStream(fis);T tReader= (T) bis.readObject();System.out.println(tReader.i + " " +tReader.j + " "+tReader.d + " " + tReader.k);} catch (FileNotFoundException e) {e.printStackTrace();}catch(IOException e1){e1.printStackTrace();}catch(ClassNotFoundException e2){e2.printStackTrace();}}}class T implements Serializable{int i=2;int j=4;double d=2.5;transient int k=15;// int k=15;}
例六:文件的目录复制
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class JavaIoCopyFile {/** * Author:liugao ec06-2 cumt * @param args */public static void main(String[] args) {File sourceFile=new File("D:/test");File targetFile=new File("F:/jstl");copy(sourceFile,targetFile);}private static void copy(File sourceFile, File targetFile) {File tarpath=new File(targetFile,sourceFile.getName());if(sourceFile.isDirectory()){tarpath.mkdir();File[] dir=sourceFile.listFiles();for(int i=0;i<dir.length;i++){copy(dir,tarpath);}}else{try {InputStream is=new FileInputStream(sourceFile);OutputStream os=new FileOutputStream(tarpath);byte[] buf=new byte;int len=0;while((len= is.read(buf))!=-1){os.write(buf);}System.out.println("复制完成");is.close();os.close();} catch (FileNotFoundException e) {e.printStackTrace();}catch(IOException e1){e1.printStackTrace();}}}}
常用的也就是这些方法吧。。。。
页:
[1]