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

转换流:

什么是转换流?

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

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

CodeQuestion.java:

package com.io.transformation;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CodeQuestion {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\\a.txt";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
        String s = bufferedReader.readLine();
        System.out.println("读取到的内容为:"+s);
        bufferedReader.close();
    }
}

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

运行结果:

 

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

 

这时候再看运行结果:

 

出现乱码了。

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

InputStreamReader:

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

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

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

看代码:

package com.io.transformation;

import java.io.*;

public class InputStreamReader_ {
    public static void main(String[] args) throws Exception {
        String filePath = "e:\\a.txt";
        InputStreamReader gbk = new InputStreamReader(new FileInputStream(filePath), "gbk");
        BufferedReader br = new BufferedReader(gbk);
        String s = br.readLine();
        System.out.println("读取到的内容为:"+s);
        br.close();
    }
}

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

 

这样再来运行:

 

成功。 

OutputStreamWriter:

package com.io.transformation;

import java.io.*;

public class OutputStreamWriter_ {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\\zhong.txt";
        String charset = "gbk";
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath), charset);
        osw.write("hi,华子");
        osw.close();
        System.out.println("按照"+charset+"编码方式保存文件成功");
    }
}

 

Propertise:

 定义:

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

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

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

常见方法:

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

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

getProperty(key):根据键获取值

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

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

看代码:

传统方法Buffered读配置文件:

package com.io.properties;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author 华子
 *
 */
public class Properties01 {
    public static void main(String[] args) throws IOException {
        String line ="";
//        读取配置文件 mysql.properties
        BufferedReader br = new BufferedReader(new FileReader("F:\\IdeaProjects\\JavaSE\\Java基础语法\\src\\mysql.properties"));
        while((line = br.readLine())!=null){
            String[] split = line.split(":");
//            如果要求值读ip的值
            if("ip".equals(split[0])){
                System.out.println(split[0]+"的值是:"+split[1]);
            }
        }
        br.close();
    }
}

配置文件信息:

 运行结果:

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

Properties读配置文件:

package com.io.properties;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

/**
 *  Properties 读文件
 */
public class Properties02 {
    public static void main(String[] args) throws IOException {
//        1.创建一个Properties对象
        Properties properties = new Properties();
//        2.加载指定配置文件
        properties.load(new FileReader("F:\\IdeaProjects\\JavaSE\\Java基础语法\\src\\mysql.properties"));
//        3.把键值对打在控制台
        properties.list(System.out);
        System.out.println("--------------------");
//        4.通过键获取值
        String user = properties.getProperty("user");
        String pwd = properties.getProperty("pwd");
        System.out.println("用户名="+user);
        System.out.println("密码="+pwd);
    }
}

运行结果:

 

Properties创建和修改配置文件 :

package com.io.properties;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * 通过Properties 创建配置文件,修改配置文件内容
 */
public class Properties03 {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
//        创建
        properties.setProperty("charset","utf-8");
        properties.setProperty("user","汤姆");
        properties.setProperty("pwd","abc111");//注意保存文件时,是中文的Unicode编码
        properties.store(new FileOutputStream("F:\\IdeaProjects\\JavaSE\\Java基础语法\\src\\mysql02.properties"),"这是配置文件的注释");
        System.out.println("保存配置文件成功");
        properties.clear();
    }
}

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

 

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

  

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值