您的位置:首页 > 编程语言 > Java开发

07java基础之IO与序列化

2017-11-19 10:27 183 查看
 IO流是整个Java开发包中最复杂的一个,那么我们一句话概括它的核心: “根据实例化子类的不同,完成的功能也不同”, 整个IO包中包含五个类一个接口:File、OutputStream、InputStream、Writer,Reader;
Serializable。



一、File类:

 File类是文件和目录的抽象表示形式,也是整个IO包中唯一一个与文件本身有关的操作类。文件本身是指文件的创建、查询、删除等操作。一个File类被创建时,它就不能再被改变内容。注意:在Java.IO包中的File类本身是一个跨平台的文件操作类,因此在操作中更多的要考虑到各个操作系统的 区别
 File类的创建:
建立File对象的时候需要指定一个路径 
  //兼容不同系统

①File f=new File("e:"+File.separator+"io"+File.separator+"ttt.txt");
②File file=new File("D:\\temp.txt");  
file.createNewFile();
一、字节流

输入字节流:
InputStream   所有输入字节流的基类。抽象类。
FileInputStream  读取文件输入字节流。
BufferedInputStream  缓冲输入字节流。该类内部其实就是维护了一个8kb字节数组而已。该类出现的目的是为了提高读读取文件数据的效率。

输出字节流:
OutputStream   所有输出字节流的基类。抽象类。
FileOutputStream  向文件输出数据的输出字节流。
BufferedOutputStream   缓冲输出字节流。该类出现的目的是为了提高向文件写数据的效率。该类内部其实也是维护了一个8kb的字节数组而已。
二、字符流(纯文本)
输入字符流:
Reader   所有输入字符流的基类。抽象类。
FileReader 读取文件字符的输入字符流。
BufferedReader 缓冲输入字符流。该类出现的目的是为了提高读取文件字符的效率并且扩展了功能(readLine()),它内部其实就是维护了一个8192个长度的字符数组。
输出字符流:
Writer  所有输出字符流的基类。抽象类。
FileWriter  向文件输出字符数据的输出字符流。
BufferedWriter  缓冲输出字符流。该类出现的目的是为了提高写文件字符的效率并且扩展了功能(newLine())。
流操作的规律:
   流操作的难点:流对象很多,不知道具体用哪个
   规律:
   (1)第一步:先明确源和目的
  源:
文本:用Reader
字节:用InputStream
目的:
文本:用Writer
字节:用OutputStream
(2)第二步:明确是不是纯文本
是:用字符流;
不是:用字节流
(3)第三步:明确流体系后,通过设备来明确具体使用哪个流对象
源设备:
键盘:System.in
硬盘:文件流File
内存:数组流ArrayStream
目的设备:
键盘:System.out
硬盘:文件流File
内存:数组流ArrayStream
*    复制指定目录下的所有文件到另一个新创建的目录
*    例如:复制d:/io 下的所有文件包括目录  到 d:/new_io
*    其中,new_io目录并不存在
public class FileDemo3 {
public void showFiles(String path){
//文件的逐层读取找文件夹中的文件夹
File f =new File(path);
for(File file:f.listFiles()){
//递归算法调用自己
if(file.isDirectory()){
showFiles(file.getAbsolutePath());

}else {
System.out.println(file.getAbsolutePath()+"\t"+file.length());

}
// System.out.println(file.getAbsolutePath());
}
}
public static void main(String[] args) {
FileDemo3 f4=new FileDemo3();
f4.showFiles("e:/io");
File f1 =new File("e:"+File.separator+"new"+File.separator+"");
f1.mkdirs();
try {
f1.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
二、序列化:
序列化:存到内存;反序列化:从内存中读出;
序列化是将对象状态转换为可保持或传输的格式的过程。说明白点就是你可以用对象输出流输出到文件.如果不序列化输出的话.很可能会乱!
 实现方式是实现java.io.Serializable接口.这个接口不需要实现任何具体方法.只要implements java.io.Serializable 就好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  IO java