锁定老帖子 主题:JavaIO复习和目录文件的复制
精华帖 (0) :: 良好帖 (1) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-23
最后修改:2010-02-23
最近用到一些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[i],tarpath);
}
}else{
try {
InputStream is=new FileInputStream(sourceFile);
OutputStream os=new FileOutputStream(tarpath);
byte[] buf=new byte[1024];
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();
}
}
}
}
常用的也就是这些方法吧。。。。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-02-25
提个建议:文件操作 对于流的关闭 能不能放在 finally中进行呢
finally{ if(null!=in){ in.close(); } } |
|
返回顶楼 | |
发表时间:2010-02-25
不错 可以借楼主总结的自己也复习复习。
|
|
返回顶楼 | |
发表时间:2010-02-26
恩,不错,很不错的复习材料,看了后收益颇多!
|
|
返回顶楼 | |
发表时间:2010-02-28
fjlyxx 写道 提个建议:文件操作 对于流的关闭 能不能放在 finally中进行呢
finally{ if(null!=in){ in.close(); } } 谢谢 filyxx 的建议,这个做的很对,就该在finally 中关闭。是我的知识疏忽。 |
|
返回顶楼 | |
浏览 8239 次