一、IO流(Stream)
文件(File):数据在磁盘中以文件为单位组织的(文件本质是一堆字节数据),文件读写操作
写:主要针对文本格式的文件,对其它格式文件,主要文件读、创建、删除、复制等操作; 基于字节操作是最底层的;
流(Stream):字节的序列形成流
流的相关组件放在:java.io包
1、字节流
InputStream
--FileInputSteam
OutputStream
--FileOutputStream
字节流可以对任意类型的文件进行读写操作(如果读图片、视频、音频等非字符型数据,只能用字节流)
复制文件
public static void copy(String srcPath,String destPath){
InputStream inputStream=null;
OutputStream outputStream=null;
try{
inputStream=new FileInputStream(srcPath);
outputStream=new FileOutputStream(destPath);
byte[] buffer=new byte[1024*8];
int len = -1;
while ((len=inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,len);
}
}
catch (FileNotFoundException e1){}
catch (IOException e2){}
finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2、字符流
对纯文本格式的文件(存放的是字符数据),SUN设计了新的组件,相对使用字节流,要更方便一些
Reader
--FileReader
Writer
--FileWriter
public static void copyWithoutBuffer(String srcPath,String desPath){
Reader reader = null;
Writer writer = null;
try {
reader = new FileReader(srcPath);
writer = new FileWriter(desPath);
char[] buffer = new char[1024];
int len = -1;
while((len=reader.read(buffer))!=-1){
writer.write(buffer,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3、缓冲流
为了提高文件读写的效率,SUN设计了缓冲流(字节流有缓冲流,字符流也有缓冲流) ---- 字符的缓冲流
java.io.BufferedReader
public static void copyFileWithBufferReader(String srcPath,String desPath){
Writer writer = null;
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(srcPath));
writer = new FileWriter(desPath);
String line = null;
while ((line=bufferedReader.readLine())!=null){
writer.write(line);
writer.write("\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4 、转换流
字节流 -------> 转换流(InputStreamReader) ------>字符流
5、标准 输入输出流
标准输入流:System.in
标准输出流:System.out
6、对象流
序列化:将对象转为流,目的是为了存贮或者传输;
反序列化:将流转为对象
条件:类需要实现 java.ioSerializable
ObjectOutputStream | ObjectInputStream
public static void read() throws Exception {
//读文件;
String path="user.data";
//读文件---- 反序列化;
InputStream inputStream = new FileInputStream(path);
ObjectInputStream objectInputStream =new ObjectInputStream(inputStream);
//从流中读数据---得到一个对象;
User user = (User) objectInputStream.readObject();
System.out.println(user);
//关闭流;
objectInputStream.close();
inputStream.close();
}
public static void writer() throws IOException{
User user = new User("tom","tom");
//将对象保存在本地;
String path="user.data";
OutputStream out =new FileOutputStream(path);
//创建一个对象流 -- 通过对象流写入一个对象;
ObjectOutputStream objectOutputStream = new ObjectOutputStream(out);
objectOutputStream.writeObject(user);
//关闭流;
objectOutputStream.close();
out.close();
}
二、XML文件
XML :Extensible Markup Language 可扩展标记语言
XML文档在项目主要用来存配制信息,熟悉XML文档数据编写
解析XML :在JDK中有API,可以解析,但不方便(读),在实际应用中,一般用第三方开源组件 (dom4j)
DOM:对HTML文档,基DOM称为HTML DOM ,对XML文档,其DOM称为XML DOM
DOM :Document Object Model 文档对象模型,在我们加载文档到内存中后,会自动构建一个DOM模型(是一个倒立节点树)
在DOM节点树中,主要有三种类型的节点:元素节点、属性节点、文本节点
解析XML文件
读取
添加
修改
删除
**约束:**能文档语法、格式等加载规则 ----- 需要你遵守 ,XML文档的约束可以使用2种方式:DTD | Schema ,可以为某一个XML文档编写DTD或者Schema,但一般没有必要