`
阿尔萨斯
  • 浏览: 4169667 次
社区版块
存档分类
最新评论

JAVA进阶-IO流(1)

 
阅读更多

http://download.csdn.net/detail/qq285016127/7963747

Java对文件的操作API一般分为字节流 字符流 其为文件的读写API框架也是通过这个思想去扩展的.另外,在流的流向中也分为源流和宿流.如图(流的主体是根据流向决定,如输入InputStream/输出流OutPutStream)


<1>从整个框架上看,io流的主要知识点分为:

1.字节流(输入FileInputStream/输出FileOutputStream)

1)字节流的构造一般都会通过文件File类,或者文件的绝对路径

2)文件的读取需要FileInputStream类,其read()提供了3个方法,需要我们提供最基本的byte字节数组,该数组作为缓冲流数据默认情况下,没有参数的时候系统会默认一个只有长度1的数组.每次读完,即把数据放在缓冲区中.

3)FileInputStream提供了available()对象方法,返回未阻塞的数据长度.一般数据较小的情况下 ,我们可以声明缓冲区的长度为此长度.一次读入内存;

4)文件的写入需要FileOutputStream类,其write()也提供了上面三种类型的方法.

示例代码如下:

/**
 *		字节流简单应用
 *
 * 	@author Lean  @date:2014-9-22  
 */
public class OutputStreamSample {

	public static void main(String[] args) {
		String filePath = "C:/Users/Administrator/Desktop/aa.txt";
		String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
		InputStream fis=null;
		OutputStream fos=null;
		int readNum=0;
		//必须为2的n次方,因为数据可能存在字符
		byte[] buff=new byte[2];
		try {
			fis=new FileInputStream(filePath);
			//通过File,File全路径 或者文件描述器构造 如果没有文件 则自动创建
			fos=new FileOutputStream(outFilePath);
			while ((readNum=(fis.read(buff)))!=-1) {
				//根据偏移量写入文件
				fos.write(buff,0,readNum);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if (fos!=null) {
					fos.close();
				}
				if (fis!=null) {
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	
}

2.字符流,也有称为转换流(InputStreamReader/OutputStreamWriter)

1)字符转换流,沿用上面的思想,也提供了读取操作,只不过该缓冲区的定义数组为char[ ];

2)字符转换流为字节流的装饰器,集成了字节流的优势,效率较高.代码如下:

/**
 *		字符流简单应用
 *
 * 	@author Lean  @date:2014-9-22  
 */
public class CharacterIOSample {
	
	public static void main(String[] args) {
		final String filePath = "C:/Users/Administrator/Desktop/aa.txt";
		final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";
		
		Writer writer=null;
		Reader reader=null;
		char[] buff=new char[512];
		int readNum=0;
		try {
			reader=new InputStreamReader(new FileInputStream(filePath));
			writer=new OutputStreamWriter(new FileOutputStream(outFilePath));
			while ((readNum=reader.read(buff))!=-1) {
				writer.write(buff,0,readNum);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if (writer!=null) {
					writer.close();
				}
				if (reader!=null) {
					reader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
		
	}
	
}

3.缓冲流(BufferedReader/BufferedWriter)

1)缓冲流字符转换流的装饰器,集成了字符转换流的优势,效率有所较高,并提供了读取整行,写入整行的方法.

2)缓冲流,顾名思义就是内置了缓冲数据,我们不需要为此再写缓冲数据(char[] / byte[]);

/**
 * 		内置缓冲流简单应用
 * 
 * @author Lean @date:2014-9-22
 */
public class BufferedIOSample {

	public static void main(String[] args) {
		final String filePath = "C:/Users/Administrator/Desktop/aa.txt";
		final String outFilePath = "C:/Users/Administrator/Desktop/bb.txt";

		BufferedWriter writer = null;
		BufferedReader reader = null;
		String appendStr =null;
		try {
			reader = new BufferedReader(new InputStreamReader(
					new FileInputStream(filePath)));
			writer = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(outFilePath)));
			while ((appendStr = reader.readLine()) != null) {
				System.out.println(appendStr);
				writer.write(appendStr);
			}
			writer.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if (writer!=null) {
					writer.close();
				}
				if (reader!=null) {
					reader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}

4.对象流(ObjectOutputStream/ObjectInputStream)

1)该流可以把数据保存到文件中去,保存的对象需要实现Serializable接口,并实现序列码(修改该类有用)

2)如果保存的对象属性也为对象,也必须实现上面的接口.实现该接口的作用为支持持久化/网络传输

3)保存的对象文件乱码,无法直接打开.但如果想更加安全,必须实现另一个接口Externalizable实现自己的保存策略.

/**
 *		
 *
 * 	@author Lean  @date:2014-9-22  
 */
public class ObjectIOSample {
	
	public static void main(String[] args) {
		saveObject();
		readObject();
	}
	
	public static void saveObject(){
		String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";
		ObjectOutputStream oos=null;
		try {
			oos=new ObjectOutputStream(new FileOutputStream(filePath));
			oos.writeObject(new Student(1, "Lean", 82));
			oos.writeObject(new Student(2, "Lucy", 62));
			oos.writeObject(new Student(3, "Lout", 85));
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if (oos!=null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	} 
	
	public static void readObject(){
		String filePath="C:\\Users\\Administrator\\Desktop\\cc.txt";
		ObjectInputStream ios=null;
		try {
			ios=new ObjectInputStream(new FileInputStream(filePath));
			Object object=null;
			for (int i = 0; i < 3; i++) {
				System.out.println(ios.readObject());
			}
		}  catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if (ios!=null) {
				try {
					ios.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	} 
	
}

/**
 * 	@author Lean  @date:2014-9-22  
 */
public class Student implements Serializable{

	private int id;
	private String name;
	private int score;
	
	public Student(int id, String name, int score) {
		this.id = id;
		this.name = name;
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", score=" + score
				+ "]";
	}
	
}

(PS:另一章高级部分正在总结....)


分享到:
评论

相关推荐

    10-java进阶-IO流1

    1.创建文件,文件位置为相较于当前工程的位置,不然会报FileNotFoundException 2.新建流:FileReader reader = new F

    2020老杜最新Java零基础进阶视频教程-IO流课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    Java进阶IO流讲义大全.docx

    Java进阶IO流讲义大全.docx

    java进阶13天资料.zip

    Java进阶13天资料 day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection...

    Java基础和Java进阶

    Java基础和Java进阶: 1、Junit使用流程 2、集合进阶(一) 3、集合框架(二) 4、Stream流 5、进阶测试 6、IO流 7、算法(部分) 8、多线程 9、网络编程 10、Java高级

    Java进阶教程之IO基础

    主要介绍了Java进阶教程之IO基础,这里只是对Java IO的基本介绍,包含读取和写入等操作,需要的朋友可以参考下

    Web服务器三剑客运维配置实战 Nginx+JVM+Tomcat+HTTP协议.zip

    ├─1.06 Nginx进阶基础-IO多路复用及内部技术架构.mp4 ├─1.07 Nginx进阶基础-虚拟主机.mp4 ├─1.08 Nginx进阶基础-虚拟主机.mp4 ├─2.01 Nginx进阶常见配置-虚拟主机+PHP-FPM.mp4 ├─2.02 Nginx进阶-常见配置-...

    2020老杜最新版Java零基础进阶视频教程-面向对象课件

    本教程适合有一定编程语言基础的学员观看,主要讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师语言表达流利,思路清晰。...

    java教程-每日一课,27天java从入门到进阶

    27天实现java从入门到进阶 第一天:语言环境 第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到抽象的升华 第10天:权限内部类包 第11天...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    该代码源码资源是一个用于讲解Java IO流的示例代码库。它包含了常见的IO类和方法的使用示例,旨在帮助理解和掌握Java中的输入输出操作。 包含: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、...

    java进阶(文件读写、递归、数组排序、单体工厂模式)

    Java进阶课程代码包含文件读写IO流,递归算法思想,数组排序、生产模式(单体、工厂)

    2020老杜最新Java零基础进阶视频教程-集合课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    2020老杜最新Java零基础进阶视频教程-注解课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    2020老杜最新Java零基础进阶视频教程-常用类课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    2020老杜最新Java零基础进阶视频教程-异常处理课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    2020老杜最新Java零基础进阶视频教程-多线程课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    2020老杜最新Java零基础进阶视频教程-反射机制课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    2020老杜最新Java零基础进阶视频教程-数组课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    Java学习书目(各学习阶段都有推荐)

    《O’reilly-Java IO》- 推荐* (包含Java IO编程的各个方面) 《O’reilly-Database Programming with JDBC》- 推荐* (JDBC编程) 《O’reilly-Java Programming with Oracle JDBC》- 参考* 三、Java Web编程 ...

    word源码java-java-learning:一个java高级工程师的进阶之路

    您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太...

Global site tag (gtag.js) - Google Analytics