io——转化流,对象流,properties(属性文件)

转化流

转换流就是在字节和字符之间起桥接作用的流。
一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。
如果使用非默认编码保存文件或者读取文件时,需要用到转换流,因为字节流的重载构造方法中有指定编码格式的参数,而FileReader 与 FileWriter 是默认编码的文本文件。
字节流处理不了编码问题,转换流是为了解决字符流编码问题。
转换流的原理是:字符流 = 字节流 + 编码表。在转换流中选择正确的编码非常的重要,因为指定了编码,它所对应的字符集自然就指定了,否则很容易出现乱码。
编码方式不同决定处理文件类型不同,字节流(ASCII)处理二进制文件,字符流(Unicode)处理文本文件,仅此而已。

Java提供了两个转换流:

  • InputStreamReader:将一个字节的输入流转换为一个字符的输入流。
  • OutputStreamWriter:将一个字符的输出流转换为一个字节的输出流
public void readerFile2UTF8() {

    try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("转换流.txt"),"UTF-8")){
        char [] data = new char[128];
        int length = inputStreamReader.read(data);
        String content = new String(data,0,length);
        System.out.println("编码为UTF-8内容:");
        System.out.println(content);
    } catch(IOException e) {
        e.printStackTrace();
    }
}

运行结果:

编码为UTF-8内容:
需求:
对现在的控制台翻译工具进行升级,由原来的单机应用变为c/s应用。
c端:保持原来控制台的使用方式
s端:完成原来查询单词,录入单词的功能

对象流

对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 。
一个对象以流的形式进行传输,叫做序列化。
java对象只能在当前的jvm里存活,一旦离开了jvm,就无法使用。对象流能把对象通过流传输到另一个jvm里。就如同一个和本尊一样的分身。
一个对象能被流传输的前提条件是必须是实现Serializable接口 。

序列化:

//任务一:对象操作输出流(对象序列化流):就是将对象写到本地文件中,或者在网络中传输对象
public void serializationPerson() {
    Person person = new Person();
    person.setName("person");
    person.setAge(38);
    // 创建对象输出流
    try(ObjectOutputStream outputStream =
                new ObjectOutputStream(new FileOutputStream("person.ser"))) {
        // 将对象序列化到person.ser文件
        outputStream.writeObject(person);
        System.out.println("对象序列化成功");
        
    } catch (IOException e) {
        e.printStackTrace();
    }

}

反序列化:

//任务二:对象操作输入流(对象反序列化流):把写到本地文件中的对象读到内存中,或者接收网络中传输的对象
public void unserializationPerson() {
    // 创建对象输入流,读取任务一创建的person.ser文件
    try(ObjectInputStream objectInputStream =
                new ObjectInputStream(new FileInputStream("person.ser"))){
        // 读取任务一创建的person.ser文件,将文件内容反序列化为Person对象
        Person person = (Person) objectInputStream.readObject();

        System.out.println("反序列化后的对象:" + person);
    } catch (IOException e){
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
}

properties

Properties我们称之为属性文件,它是一个文本文件,存储数据的格式为:key=value;

读取系统配置文件

// 任务一:读取系统属性配置,并把系统属性写入到文件
public void readerAndWriterSystemProperties(){
   Properties properties =  System.getProperties();

   System.out.println(properties);

    try(FileWriter fileWriter = new FileWriter("system.properties")) {
        properties.store(fileWriter, "");

    } catch (IOException e){
        e.printStackTrace();
    }
}

读取自己的配置文件

config.properties:

zn.username=zn
zn.password=123456

zx.username=zx
zx.password=2355
//任务二:读取我们自己的属性文件
public void readerConfigProperties() {
    try(FileInputStream fileInputStream = new FileInputStream("config.properties")){
        Properties properties = new Properties();
        properties.load(fileInputStream);
        String username = properties.getProperty("zn.username");
        String password = properties.getProperty("zx.password");
        System.out.println("username:" + username + ",password:" + password);
    } catch (IOException e){
        e.printStackTrace();
    }
}

运行结果:

"C:\Program Files\Java\jdk1.8.0_202\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=65027:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\zn\.m2\repository\org\junit\platform\junit-platform-launcher\1.8.1\junit-platform-launcher-1.8.1.jar;C:\Users\zn\.m2\repository\org\junit\vintage\junit-vintage-engine\5.8.1\junit-vintage-engine-5.8.1.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar;D:\project\java\teacher-wanxi\stage-two\out\production\day10-file;C:\Users\zn\.m2\repository\junit\junit\4.13.1\junit-4.13.1.jar;C:\Users\zn\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\zn\.m2\repository\org\junit\jupiter\junit-jupiter\5.8.1\junit-jupiter-5.8.1.jar;C:\Users\zn\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.8.1\junit-jupiter-api-5.8.1.jar;C:\Users\zn\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\zn\.m2\repository\org\junit\platform\junit-platform-commons\1.8.1\junit-platform-commons-1.8.1.jar;C:\Users\zn\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\zn\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.8.1\junit-jupiter-params-5.8.1.jar;C:\Users\zn\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.8.1\junit-jupiter-engine-5.8.1.jar;C:\Users\zn\.m2\repository\org\junit\platform\junit-platform-engine\1.8.1\junit-platform-engine-1.8.1.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.wx.test.PropertiesDemoTest,readerConfigProperties
username:zn,password:2355

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值