`
ec06cumt
  • 浏览: 19879 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JavaIO复习和目录文件的复制

    博客分类:
  • J2SE
阅读更多

最近用到一些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();
			}
		}
	}
	
	

}

 

 

 

 常用的也就是这些方法吧。。。。

 

 

 

 

 

 

 

分享到:
评论
4 楼 ec06cumt 2010-02-28  
fjlyxx 写道
提个建议:文件操作 对于流的关闭 能不能放在 finally中进行呢
finally{
   if(null!=in){
      in.close();
   }
}


谢谢 filyxx 的建议,这个做的很对,就该在finally 中关闭。是我的知识疏忽。
3 楼 wh870712 2010-02-26  
恩,不错,很不错的复习材料,看了后收益颇多!
2 楼 xici_magic 2010-02-25  
不错  可以借楼主总结的自己也复习复习。
1 楼 fjlyxx 2010-02-25  
提个建议:文件操作 对于流的关闭 能不能放在 finally中进行呢
finally{
   if(null!=in){
      in.close();
   }
}

相关推荐

    java IO流文件详例

    io流是任何一门语言中都非常重要的技术,繁琐的课本介绍非但不能够解决问题,还会造成很多的混淆 该文件将各个io流功能放到一起呈现,方便新手对比学习,当场实践,也方便老手进行全面的复习回顾。简洁易懂、涵盖...

    java 编程入门思考

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    Java初学者入门教学

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    java联想(中文)

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    JAVA_Thinking in Java

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    Thinking in Java简体中文(全)

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    Thinking in Java 中文第四版+习题答案

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    “Thinking in Java”详细目录   写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 ...

    Think in Java(中文版)chm格式

    13.16.3 用Java 1.1 AWT制作窗口和程序片 13.16.4 再探早期示例 13.16.5 动态绑定事件 13.16.6 将商业逻辑与UI逻辑区分开 13.16.7 推荐编码方法 13.17 Java 1.1 UI API 13.17.1 桌面颜色 13.17.2 打印 13.17...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    “Thinking in Java”详细目录   写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 ...

    ThinkInJava

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    thinkinjava

    1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 ...

    2017最新大数据架构师精英课程

    本资源为大数据基础到中高级教学资源,适合稍微有点大数据或者java基础的人群学习,资源过大,上传乃是下载链接,不多说,上目录: 1_java基础2 l3 a2 a$ t7 J2 b+ `- p 2_java引入ide-eclipse 3_java基础知识-循环...

Global site tag (gtag.js) - Google Analytics