特殊文件

发布时间 2023-09-09 11:54:27作者: SimpleWord
title: 特殊文件
index_img: https://tuchuangs.com/imgs/2023/08/13/c648af4d798edc8f.png
tags:
  - Java SE
categories:
  - Java SE
excerpt: 特殊文件

文本文件

普通文本文件txt:

  • 内容随便写,无格式,无限制。
  • 但是你按照规则来写也是可以读的【properties的方法来读即可】

特殊文本文件(易读、易解析):

  • properties:

    • 是集合,但不会当集合使用,往往用于配置文件
    • 键值对格式,键不可重复。
    • 适用于对象属性较少
  • XML

    • 可以表示更加复杂的关系
    • 可以自定义标签
    • 标签中可以使用属性
    • 参考html

image-20230813204126616

properties

读取数据

  • 文本文件可使用字节或字符流
构造器/方法 说明
public Properties() //构造器 用于构建Properties集合对象(空参)
public void load(Inputstream is) 通过字节输入流,读取属性文件里的键值对数据
public void load(Reader reader) 通过字符输入流,读取属性文件里的键值对数据
public string getProperty(string key) 根据键获取值(其实就是get方法的效果),独有一般不用Map提供的
public Set stringPropertyNames() 获取全部键的集合(其实就是ketSet方法的效果)

image-20230813205455157

public class Main {
    public static void main(String[] args) {
        try {
            extracted();
        } catch (FileNotFoundException e) {
            System.out.println("文件路径不存在");
        } catch (IOException e) {
            System.out.println("读取失败");
        }
    }

    private static void extracted() throws IOException {
        Properties prop = new Properties(); //properties对象

        FileReader fileReader = new FileReader("src/main/java/bid/simpleword/pl/test.properties"); //需要一个输入流

        prop.load(fileReader); //读取键值对
        fileReader.close();

        Set<String> user = prop.stringPropertyNames(); //键的集合
        user.forEach(s -> System.out.println(s + ":" + prop.getProperty(s))); //打印键值对
    }
}

image-20230813205634207

写入数据

image-20230813210027678

public class Main {
    public static void main(String[] args) {
        try {
            extracted();
        } catch (FileNotFoundException e) {
            System.out.println("文件路径不存在");
        } catch (IOException e) {
            System.out.println("读取失败");
        }
    }

    private static void extracted() throws IOException {
        Properties prop = new Properties(); //properties对象

        prop.setProperty("张1", "1232");
        prop.setProperty("张2", "1232");
        prop.setProperty("张3", "1232");
        prop.setProperty("张4", "1232");

        //输出流并追加
        FileWriter fileWriter = new FileWriter("src/main/java/bid/simpleword/pl/test.properties", true);
        prop.store(fileWriter, "存储了一些用户");
        fileWriter.close();
    }
}

image-20230813211200888

XML

<?xml version="1.0" encoding="UTF-8" ?>
<!--上方这一行必须要,且必须在最上面-->

<!--根标签[users]只能有一个-->
<users>
    <admin>
        <name>管理员</name>
    </admin>
    <user>
        <name>张三</name>
        <age>16</age>
        <sex>女</sex>
    </user>

    <user>
        <name>里斯</name>
        <age>16</age>
        <sex>男</sex>
    </user>

    <user>
        <name>张开</name>
        <age>12</age>
        <sex>女</sex>
    </user>
</users>

解析

解析使用Dom4j第三方框架,它的解析思想,类似于js的文档树

image-20230813213307885

image-20230813213943047

public class Main {
    public static void main(String[] args) throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document doc = saxReader.read("src/main/java/bid/simpleword/pl/test.xml");

        System.out.println("------根标签对象--------");
        Element rootElement = doc.getRootElement();
        System.out.println("Root Element: " + rootElement.getName());

        System.out.println("------下一级标签对象----------");
        List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            System.out.println("Element Name: " + element.getName());
        }

        System.out.println("------下一级标签对象中的所有user对象----------");
        List<Element> userElements = rootElement.elements("user");
        for (Element userElement : userElements) {
            System.out.println("User Element: " + userElement.getName());
            System.out.println("Name: " + userElement.elementText("name"));
            System.out.println("Age: " + userElement.elementText("age"));
            System.out.println("Sex: " + userElement.elementText("sex"));
            System.out.println();
        }

        System.out.println("------属性值----------");
        Element admin = rootElement.element("admin");
        System.out.println("Admin Name Attribute: " + admin.attributeValue("name"));
    }
}

image-20230813220619209

生成

Stringbuilder拼接为XML,IO流写入

public class Main {
    public static void main(String[] args) throws IOException {
        StringBuilder sbr = new StringBuilder();
        sbr.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
                .append("\n").append("<books>")
                .append("\n").append("<book>")
                .append("\n").append("<name>入门到精通</name>")
                .append("\n").append("<version>1.0.1</version>")
                .append("\n").append("</book>")
                .append("\n").append("<book>")
                .append("\n").append("<name>入门到精通2</name>")
                .append("\n").append("<version>1.0.1</version>")
                .append("\n").append("</book>")
                .append("\n").append("</books>");
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/main/java/bid/simpleword/pl/1.xml"));
        bw.write(sbr.toString());
        bw.close();   // 记得关闭流
    }
}

image-20230813221948910