Java高级 IO和XML

一、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,但一般没有必要

上一篇:JavaSE网络编程(了解)


下一篇:简单实现一个用Java来解释Java的解释器