`
ec06cumt
  • 浏览: 20357 次
  • 性别: 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复习

    - Files类提供了大量静态方法,用于执行文件和目录的基本操作,如复制、移动、删除等。 在阅读《JAVA_IO流学习总结.pdf》时,你可以深入理解上述知识点,并通过实践例子来巩固你的理解。理解并熟练运用Java IO对于...

    java期末复习代码 5个 记事本 异常 文件复制 socket编程 数据库

    Java的IO流提供了解决这个问题的工具,如FileInputStream和FileOutputStream。在"复制字体"的项目中,你将学习如何使用这些类进行二进制数据的读取和写入,实现文件的精确复制。 "Socket编程"是网络编程的基础。...

    java IO流文件详例

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

    JAVA面试重点复习内容

    - 文件操作,包括读写文件、复制文件。 - 字节流和字符流的区别,以及它们的常见类如FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等。 - 理解对象序列化和反序列化。 9. **反射** - ...

    java_java考试复习题 本科.pdf

    以下是一些Java考试复习中的关键知识点: 1. **基本概念**:Java分为Java Application(应用程序)和Java Applet(小程序),两者都是用Java编写的程序,但运行环境不同。Application需要main方法作为程序入口,而...

    java高级编程复习题.docx

    考题要求将.java文件存储到指定目录,这涉及到文件和目录的操作,可以使用`java.io.File`类来创建、复制文件和目录。 总的来说,这些题目涵盖了Java多线程的实现、GUI界面设计与事件处理、数据库操作(JDBC)以及...

    JAVA核心面试知识整理.pdf

    Java核心面试知识整理包括了对JVM内存区域、...总结而言,这份面试知识点整理为Java开发者提供了一个全面、系统的复习框架,帮助面试者巩固和加深对Java核心技术的理解,以便在面试中展现出扎实的理论基础和实践能力。

    字节流字符流的使用方法源码+文档

    在这个压缩包中,你将找到关于如何使用这些流的源代码示例和相关的文档资料,主要涵盖了文件复制,包括单个文件和多个文件的复制。 1. **字节流**:字节流是基于八位字节的数据流,分为输入流和输出流。Java中的`...

    java复习资料.pdf

    1. **类库**:Java提供了丰富的标准库,包括`java.lang`, `java.util`, `java.io`, `java.net`, `java.awt`和`java.applet`等。这些类库包含了语言核心功能、实用工具、输入输出处理、网络通信、图形用户界面和小...

    JAVA程序设计机试题目复习大纲

    以下是一份详细的复习大纲,旨在帮助你全面理解和熟练应用JAVA编程语言。 1. **基础语法** - 变量和数据类型:包括基本类型(如int, double, boolean)和引用类型(如String, Class) - 运算符:熟悉算术、比较、...

    2021最新Java面试题及答案V2.0.pdf

    Java IO提供阻塞IO模型、非阻塞IO模型、多路复用IO模型、信号驱动IO模型和异步IO模型等。Java NIO在JDK 1.4中引入,提供了比传统Java IO更多的性能。NIO的主要特点是基于通道(Channel)和缓冲区(Buffer)的I/O操作...

    Java 软件开发复习提纲.pdf

    File类用于文件操作,而IO流分为字节流(InputStream和OutputStream)和字符流(Reader和Writer)。字节流处理二进制数据,而字符流处理文本数据。此外,还有缓冲流(BufferedInputStream, BufferedReader等)用于...

    java第十章课程例题

    此外,记事本程序可能还会涉及文本格式的处理,比如文本的剪切、复制和粘贴功能。这需要利用Clipboard类来实现剪贴板操作,以及Document类来管理JTextArea中的文本内容。 在编程实践中,良好的代码结构和设计模式也...

    JAVA核心知识点整理.pdf

    从给定文件的标题、描述、标签以及部分内容中整理出的Java核心知识点如下: 首先,标题中的"JAVA核心知识点整理.pdf"说明这份文档是一个...这份文档无疑为想要精进Java技能的开发者提供了一个全面的复习和学习资源。

    四川大学 2013和2014学年java试题

    2. 文件操作:创建、读写、复制文件,使用File类进行文件和目录操作。 3. 缓冲流:提高读写效率,如BufferedReader、BufferedWriter。 4. 序列化与反序列化:了解ObjectOutputStream和ObjectInputStream的作用。 五...

    java经典课程设计案例

    5. **IO流**:Java的IO流用于读取和写入数据,如文件操作。案例可能包括读取文本文件、写入数据到文件、复制文件等,让你熟悉字节流和字符流的区别,以及如何进行缓冲区操作。 6. **线程并发**:Java提供了强大的...

    Java面试宝典2018-最全面试资料

    Java的IO(输入/输出)是与文件系统和网络通信打交道的基础,书中提到了各种IO类的使用和区别。 在企业实战面试题方面,书中列举了大量真实案例,包括数据库知识、Spring等Java框架以及当时流行的最新技术,如Dubbo...

    java程序员面试(7个文件)

    7. **IO流**:Java的输入/输出系统是面试中的常见话题,包括字节流和字符流的区别,缓冲流的使用,以及File类、RandomAccessFile类的使用。 8. **反射机制**:反射允许程序在运行时动态访问和修改类的信息,理解...

Global site tag (gtag.js) - Google Analytics