Java_流和文件

文件

**File类:**
	该类可以获取文件信息,也可以对文件进行管理
	File对象可以表示文件,目录,利用它可以对文件,目录及属性进行基本操作
**文件列表器**
	String[] list():当File对象为目录时,返回该目录下的所有文件及子目录
	File[] listFile():返回File对象对应路径下的所有文件对象数组
  *`*可以接受FileNameFilter类型参数实现过滤*`*

按照流的方向:
	输入流:InputStream
	输出流:OutputStream
按照处理流的基本单位:
	字符流:在流中处理的基本单位为字节(8bit)的流,数据流中的最小单位
	字节流:例如用来读写文本文件			16Unicode
		Unicode:用数字代表文字的一项标准
按照流的角色:
	节点流
	过滤流
*字节流
	InputStream和OutputStream都是用于处理字节数据,他们读写流的方式都是以字节(byte)为单位。
	InputStream类
		1.是所有字节输入流的父类,用于从数据源按照字节的方式读取数据
		2.该类是一个抽象类,想要对数据进行读取,必须使用InputStream类的子类,
			通过创建子类的流对象来调用read方法进行数据的读取。
	OutputStream类
		1.是所有字节输出流的类,主要用于把数据按照字节的方式写入到目的端。
		2.该类也是抽象类,必须使用OutputStream类的子类,
			通过创建子类的流对象并调用write方法进行数据的写入
		若不存在文件,就会先创建一个,若存在,先清空文件内容再写入新内容
		若想把新内容追加到原来内容后面,可以利用:
			FileOutputStream(String name,boolean append)创建一个文件输出流对象,
			设置append的值为true。
			
		过滤流
			分为过滤输入流和过滤输出流,过滤流实现了对一个已经存在的流连接和
			封装,通过所封装
				的流的功能调用实现数据读/写功能
			FilterInputStream为过滤输入流,其父类为InputStream。
			FilterOUtputStream为过滤输出流,其父类为OutputStream。
*字符流:
	Reader类是字符输入流的所有类父类,用于从数据源按照字符的方式读取数据
	Writer类是字符输出流的所有类父类,用于按照字符的方式把数据源写入流中

字符流示例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Two{
	public static void main(String[] args) {
		BufferedWriter bw=null;
		BufferedReader br=null;
		try {
			bw=new BufferedWriter(new FileWriter("D://test.txt",true));

			bw.write("hello world!");
		bw.flush();
			br=new BufferedReader(new FileReader("d:\\test.txt"));
			String result=null;
			while((result=br.readLine())!=null) {
			System.out.println(br.readLine());
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(bw!=null) {
				try {
					bw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(br!=null) {
				try {
					br.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}
}
**对象流**
	利用ObjectOutputStream可实现对象的序列化,把对象写入字节流
		,可以用java.io包中的各种字节流类将其保存到文件中。
		对象序列化特点:
			1.对象序列化可以实现分布式对象。
			2.在java中对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个数据对象的数据。
				可以将整个对象层次写入字节流中,可以保存在文件中或在网络上传递。
				利用对象序列化可以进行对象的“深复制”,及复制对象本身及引用的数据。
				序列化一个对象可能得到整个对象序列。
	在Java中,如果需要将某个对象保存到磁盘或通过网络传输,那么这个类必须实现java.lang包下的
	Serializable接口或Externalizable接口。
	和ObjectInputStream可实现对象的反序列化,从一个字节流中读取一个对象

举例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Three{
	public static void main(String[] args) {
		ObjectOutputStream oops=null;
		ObjectInputStream oips=null;
		Person p=new Person("lisi");
		try {
			oops=new ObjectOutputStream(new FileOutputStream("d:\\test.tmp"));
			oops.writeObject(p);
			oops.flush();
			oips=new ObjectInputStream(new FileInputStream("d:\\test.tmp"));
			System.out.println(((Person)oips.readObject()).name);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(oops!=null) {
				try {
					oops.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(oips!=null) {
				try {
					oips.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

class Person implements Serializable{
	public String name;
	public Person(String name) {
		this.name=name;
	}
}
发布了63 篇原创文章 · 获赞 17 · 访问量 4104

猜你喜欢

转载自blog.csdn.net/Bonport/article/details/103005610