文件
**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;
}
}