• Java IO流 转换流 和 Properties处理配置文件


    转换流:

    什么是转换流?

    转换流,顾名思义,就是将字节流转换成字符流。通常用于处理中文乱码问题。

    先写一个乱码问题,用于引出转换转换流。

    CodeQuestion.java:

    1. package com.io.transformation;
    2. import java.io.BufferedInputStream;
    3. import java.io.BufferedReader;
    4. import java.io.FileReader;
    5. import java.io.IOException;
    6. public class CodeQuestion {
    7. public static void main(String[] args) throws IOException {
    8. String filePath = "e:\\a.txt";
    9. BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
    10. String s = bufferedReader.readLine();
    11. System.out.println("读取到的内容为:"+s);
    12. bufferedReader.close();
    13. }
    14. }

    这是一个简单的使用Buffered处理流读取文本文件。

    运行结果:

     

    这么写没啥问题,但是,如果将文本文件的编码改成ANSI国标码,就会出现乱码。

     

    这时候再看运行结果:

     

    出现乱码了。

    这个时候,就需要我们使用转换流InputStreamReader。

    InputStreamReader:

    1. InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成字符流(Reader)

    2.当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题, 所以建议将字节流转换成字符流

    3.可以在使用时指定编码格式(比如utf-8, gbk , gb2312, IS08859-1等)

    看代码:

    1. package com.io.transformation;
    2. import java.io.*;
    3. public class InputStreamReader_ {
    4. public static void main(String[] args) throws Exception {
    5. String filePath = "e:\\a.txt";
    6. InputStreamReader gbk = new InputStreamReader(new FileInputStream(filePath), "gbk");
    7. BufferedReader br = new BufferedReader(gbk);
    8. String s = br.readLine();
    9. System.out.println("读取到的内容为:"+s);
    10. br.close();
    11. }
    12. }

    先使用转换流指定编码方式,在放入到BufferedReader中。 

     

    这样再来运行:

     

    成功。 

    OutputStreamWriter:

    1. package com.io.transformation;
    2. import java.io.*;
    3. public class OutputStreamWriter_ {
    4. public static void main(String[] args) throws IOException {
    5. String filePath = "e:\\zhong.txt";
    6. String charset = "gbk";
    7. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath), charset);
    8. osw.write("hi,华子");
    9. osw.close();
    10. System.out.println("按照"+charset+"编码方式保存文件成功");
    11. }
    12. }

     

    Propertise:

     定义:

    1)专门用于读写配置文件的集合类:

     配置文件的格式: 键=值 键=值

    2)注意:键值对不需要有空格,值不需要用引号一起来。 默认类型是String

    常见方法:

    load:加载配置文件的键值对到Properties对象

    list:将数据显示到指定设备

    getProperty(key):根据键获取值

    SetProperty(key,value):设置键值对到Properties对象

    store:将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,会存储为unicode码

    看代码:

    传统方法Buffered读配置文件:

    1. package com.io.properties;
    2. import java.io.BufferedReader;
    3. import java.io.FileReader;
    4. import java.io.IOException;
    5. /**
    6. * @author 华子
    7. *
    8. */
    9. public class Properties01 {
    10. public static void main(String[] args) throws IOException {
    11. String line ="";
    12. // 读取配置文件 mysql.properties
    13. BufferedReader br = new BufferedReader(new FileReader("F:\\IdeaProjects\\JavaSE\\Java基础语法\\src\\mysql.properties"));
    14. while((line = br.readLine())!=null){
    15. String[] split = line.split(":");
    16. // 如果要求值读ip的值
    17. if("ip".equals(split[0])){
    18. System.out.println(split[0]+"的值是:"+split[1]);
    19. }
    20. }
    21. br.close();
    22. }
    23. }

    配置文件信息:

     运行结果:

    如果要求只读IP的值,较为复杂。

    Properties读配置文件:

    1. package com.io.properties;
    2. import java.io.FileNotFoundException;
    3. import java.io.FileReader;
    4. import java.io.IOException;
    5. import java.util.Properties;
    6. /**
    7. * Properties 读文件
    8. */
    9. public class Properties02 {
    10. public static void main(String[] args) throws IOException {
    11. // 1.创建一个Properties对象
    12. Properties properties = new Properties();
    13. // 2.加载指定配置文件
    14. properties.load(new FileReader("F:\\IdeaProjects\\JavaSE\\Java基础语法\\src\\mysql.properties"));
    15. // 3.把键值对打在控制台
    16. properties.list(System.out);
    17. System.out.println("--------------------");
    18. // 4.通过键获取值
    19. String user = properties.getProperty("user");
    20. String pwd = properties.getProperty("pwd");
    21. System.out.println("用户名="+user);
    22. System.out.println("密码="+pwd);
    23. }
    24. }

    运行结果:

     

    Properties创建和修改配置文件 :

    1. package com.io.properties;
    2. import java.io.FileNotFoundException;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. import java.util.Properties;
    6. /**
    7. * 通过Properties 创建配置文件,修改配置文件内容
    8. */
    9. public class Properties03 {
    10. public static void main(String[] args) throws IOException {
    11. Properties properties = new Properties();
    12. // 创建
    13. properties.setProperty("charset","utf-8");
    14. properties.setProperty("user","汤姆");
    15. properties.setProperty("pwd","abc111");//注意保存文件时,是中文的Unicode编码
    16. properties.store(new FileOutputStream("F:\\IdeaProjects\\JavaSE\\Java基础语法\\src\\mysql02.properties"),"这是配置文件的注释");
    17. System.out.println("保存配置文件成功");
    18. properties.clear();
    19. }
    20. }

     使用stroe可以指定注释内容,也可以写null 

     

    创建出来的配置文件如图:

      

     

     

     

     

     

     

  • 相关阅读:
    【LeetCode】Day108-和为 K 的子数组
    Python实现---南邮离散数学实验二:集合上二元关系性质判定
    bond0双网卡主备实验
    NoSQL之Redis配置与优化
    华为云新开源低代码引擎 TinyEngine核心亮点
    Java 进阶集合和数据结构
    树莓派 交叉编译工具链的安装
    Elasticsearch —索引性能技巧
    橘子学Flink03之Flink的流处理与批处理
    Vue3之Suspense
  • 原文地址:https://blog.csdn.net/qq_59212867/article/details/125516003