首页 > 其他分享 >打印流和Properties类

打印流和Properties类

时间:2023-05-21 17:31:47浏览次数:29  
标签:String 打印 dog properties new Properties out

1. 打印流PrintStream 和 PrintWriter  636

打印流只有输出流,没有输入流

打印流和Properties类_System


打印流和Properties类_java_02

1.1 应用实例PrintStream字节输出打印流  636

代码在com.stulzl.printstream_.包中

PrintStream_ 
package com.stulzl.printstream_;

import java.io.IOException;
import java.io.PrintStream;

//应用实例PrintStream字节输出打印流/输出流  636
public class PrintStream_ {
    public static void main(String[] args) throws IOException {
        PrintStream out = System.out;
        //在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器
        out.print("john,hello");
        //因为 print 底层使用的是 write , 所以我们可以直接调用 write 进行打印/输出
        out.write("你好,中国".getBytes());//getBytes()方法将字符串转成一个byte[]数组
        //关闭流
        out.close();

        //我们可以去修改打印流输出的位置/设备
        //1. 输出修改成到 "e:\\f1.txt"
        //2. "hello, 韩顺平教育~" 就会输出到 e:\f1.txt
        System.setOut(new PrintStream("e:\\f1.txt"));//这句修改了数据打印的位置
        System.out.println("hello,你好");
    }
}

1.2 应用案例PrintWriter字符输出打印流  637

代码在com.stulzl.printwriter_.

PrintWriter_ 
package com.stulzl.printwriter_;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

//应用案例PrintWriter字符输出打印流  637
public class PrintWriter_ {
    public static void main(String[] args) throws IOException {
        //PrintWriter printWriter = new PrintWriter(System.out);
        //这里更改打印位置到e:\\f2.txt
        PrintWriter printWriter = new PrintWriter(new FileWriter("e:\\f2.txt"));
        //默认的打印到屏幕
        printWriter.print("hi,北京");
        printWriter.close();
    }
}

2. Properties 类  638

打印流和Properties类_mysql_03

2.1 看一个需求  638

如下一个配置文件mysql.properties

ip= 192.168.0.13

user: = root

pwd= 12345

请问编程读取ip. user和pwd的值是多少

使用Properties类可以方便实现,后面补充

2.1.1 传统的方法

再src文件下建立一个mysql.properties文件

ip=1992.168.100.100
user=root
pwd=12345

代码在com.stulzl.properties_.包中

Properties01

package com.stulzl.properties_;

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

//如下一个配置文件mysql.properties  638
//ip= 192.168.0.13
//user: = root
//pwd= 12345
//请问编程读取ip. user和pwd的值是多少
public class Properties01 {
    public static void main(String[] args) throws IOException {
        //传统方法
        //虽然传统方法也能获取ip. user和pwd的值,但是总归是有点麻烦
        //读取 mysql.properties 文件,并得到 ip, user 和 pwd
        BufferedReader br = new BufferedReader(new FileReader("src\\mysql.properties"));
        String line = "";
        //按行循环读取
        while((line = br.readLine())!=null){
            //System.out.println(line);
            //split()方法可以将字符串根据传入的符号拆开(此题将每个字符串拆成两部分了),放到一个数组里
            String[] split = line.split("=");
            System.out.println(split[0]+"值是:"+split[1]);

            //举例传统方法为啥麻烦,我们还得写个判断,有点麻烦
            //我们要求只获取ip值
//            if("ip".equals(split[0])){
//                System.out.println(split[1]);
//            }

        }
        br.close();
    }
}

2.2 Properties基本介绍  639

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

配置文件的格式:

键=值

键=值

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

3) Properties的常见方法

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

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

getProperty(key):根据键获取值

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

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

含有中文,会存储为unicode码

http://tool.chinaz.com/tools/unicode.aspx      unicode码查询工具

2.2.1 案例应用1

1.使用Properties类完成对mysql.properties的读取

代码在com.stulzl.properties_.包中

Properties02

package com.stulzl.properties_;

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

//1.使用Properties类完成对mysql.properties的读取,639
public class Properties02 {
    public static void main(String[] args) throws IOException {
        //使用Properties类完成对mysql.properties的读取,
        //1. 创建Properties对象
        Properties properties = new Properties();
        //2. 加载指定配置文件
        properties.load(new FileReader("src\\mysql.properties"));
        //3. 把k-v显示再控制台
        properties.list(System.out);//这是一个方法,不必纠结
        //4. 根据key获取对应的值
        String User = properties.getProperty("user");
        String pwd = properties.getProperty("pwd");
        System.out.println("用户名="+User);
        System.out.println("密码是="+pwd);
    }
}

2.2.2 案例应用2  640

2.使用Properties类添加key-val到新文件mysql2.properties中

3.使用Properties类完成对mysql2.properties的读取,并修改某 个key-val

代码在com.stulzl.properties_.包中

Properties03

package com.stulzl.properties_;

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

//2.使用Properties类添加key-val到新文件mysql2.properties中  640
//3.使用Properties类完成对mysql2.properties的读取,并修改某 个key-val
public class Properties03 {
    public static void main(String[] args) throws IOException {

        Properties properties = new Properties();
        //创建k-v配置信息
        properties.setProperty("charset","utf8");
        properties.setProperty("user","汤姆");//注意保存时,是中文的 unicode 码值
        properties.setProperty("pwd","abc111");

        //修改
        //1.如果该文件没有 key 就是创建
        //2.如果该文件有 key ,就是修改
        properties.setProperty("pwd","888");
        

        //将k-v存储到文件中即可
        //这里的null代表文件注释,一般没有什么特别的用处
        properties.store(new FileOutputStream("src\\mysql2.properties"),null);
        System.out.println("保存配置文件成功……");

    }
}

3.练习1  641

(1)在判断e盘下是否有文件夹mytemp,如果没有就创建mytemp

(2)在e:\\mytemp目录下,创建文件hello.txt

(3)如果hello.txt已经存在,提示该文件已经存在,就不要再重复创建了

(4)并且在hello.txt文件中,写入hello,world~

代码在com.stulzl.exercise01.包中

Exercise01

package com.stulzl.exercise01;

import java.io.*;

//(1)在判断e盘下是否有文件夹mytemp,如果没有就创建mytemp  641
//(2)在e:\\mytemp目录下,创建文件hello.txt
//(3)如果hello.txt已经存在,提示该文件已经存在,就不要再重复创建了
//(4)并且在hello.txt文件中,写入hello,world~
public class Exercise01 {
    public static void main(String[] args) throws IOException {
        String directoryPath = "e:\\mytemp";
        File file = new File(directoryPath);
        if(!file.exists()){//如果e:\mytemp目录不存在
            //创建目录
            if(file.mkdirs()){//mkdirs创建的是多级目录
                System.out.println("创建 "+directoryPath+"成功");
            }else{
                System.out.println("创建 "+directoryPath+"失败");
            }
        }
        String filePath = directoryPath+"\\hello.txt";//拼接 e:\\mytemp\\hello.txt
        file = new File(filePath);
        if(!file.exists()){//如果hello.txt文件不存在
            //创建文件
            if(file.createNewFile()){//创建一个新文件
                System.out.println(filePath+"创建成功");
                //如果文件存在,我们就使用BufferedWriter 字符输入流写入内容hello,world~
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
                //输出数据
                bufferedWriter.write("hello,world~");
                //关闭流
                bufferedWriter.close();

            }else{
                System.out.println(filePath+"创建失败");
            }
        }else{//如果hello.txt文件存在
            System.out.println(filePath+"已经存在,不在重复创建");
        }
    }
}

4. 练习2  642

要求:使用BufferedReader读取一个文本文件,为每行加上行号,再连同内容一并输出到屏幕上。如果把文件的编码改成了gbk,出现中文乱码,大家思考如何解决

1.默认是按照utf-8处理,开始没有乱码

2.提示:使用我们的转换流,将FileInputStream -> InputStreamReader[可以指定编码]

代码在com.stulzl.exercise02.包中

Exercise02
package com.stulzl.exercise02;

import java.io.*;

//要求:使用BufferedReader读取一个文本文件,为每行加上行号,  642
//再连同内容一并输出到屏幕上。
//如果把文件的编码改成了gbk,出现中文乱码,大家思考如何解决
//1.默认是按照utf-8处理,开始没有乱码
//2.提示:使用我们的转换流,将FileInputStream -> InputStreamReader[可以指定编码]
public class Exercise02 {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\\story.txt";

        //如果把文件的编码改成了gbk,出现中文乱码,大家思考如何解决
        //将FileInputStream字节流 -> InputStreamReader字节输入转换流
        InputStreamReader inputStreamReader = new
                InputStreamReader(new FileInputStream(filePath),"gbk");

        //将转换完成的inputStreamReader放入BufferedReader中
        BufferedReader br = new BufferedReader(inputStreamReader);
        String data = "";
        int count = 1;//行号
        while((data = br.readLine())!=null){
            System.out.println((count++)+" "+data);
        }
        br.close();
    }
}

5. 练习3   643

(1)要编写一个dog.properties

name = tom

age= 5

color= red

(2)编写Dog类(name,age,color)创建一个dog对象, 读取dog.properties 用相应的内容完

成属性初始化,并输出

(3)将创建的Dog对象,序列化到文件dog.dat文件

代码在com.stulzl.exercise03

Exercise03

package com.stulzl.exercise03;

import org.junit.jupiter.api.Test;

import java.io.*;
import java.util.Properties;

//(1)要编写一个dog.properties   643
//name = tom
//age= 5
//color= red
//(2)编写Dog类(name,age,color)创建一个dog对象, 读取dog.properties 用相应的内容完
//成属性初始化,并输出
//(3)将创建的Dog对象,序列化到文件dog.dat文件
public class Exercise03 {
    public static void main(String[] args) throws IOException {
        String filePath = "src\\dog.properties";
        //先创建一个Properties对象
        Properties properties = new Properties();
        //加载信息
        properties.load(new FileReader(filePath));
        properties.list(System.out);

        //(2)编写Dog类(name,age,color)创建一个dog对象, 读取dog.properties 用相应的内容完
        //成属性初始化,并输出
        //此题的意思是将相应值取出,然后在传入构建好的Dog类中,通过dog类输出信息
        //取出相应信息,取出的类型是Object,个别值需要类型转换
        String name = properties.getProperty("name")+"";//+""就是将Object-》String
        //这里将Object类型转为了int,Integer.parseInt()方法,是将字符串转为int类型的方法
        int age = Integer.parseInt(properties.getProperty("age"));
        String color = properties.getProperty("color")+"";
        //创建Dog类对象
        Dog dog = new Dog(name,age,color);
        System.out.println("====dog对象信息====");
        System.out.println(dog);//输出信息

        //(3)将创建的Dog对象,序列化到文件dog.dat文件
        String serFilePath = "e:\\dog.dat";
        //创建序列化对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(serFilePath));
        //将dog对象惊醒序列化
        oos.writeObject(dog);
        //关闭流
        oos.close();
        System.out.println("====序列化完成====");


    }
    //编写一个方法进行反序列化
    @Test
    public void m1() throws IOException, ClassNotFoundException {
        String serFilePath = "e:\\dog.dat";
        //创建反序列化对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(serFilePath));
        //其实也可以用Object接收dog,就不用类型转换了
        //dog 的编译类型是 Object , dog 的运行类型是 Dog
        Dog dog = (Dog)ois.readObject();//类型转换,使用Dog类接收
        System.out.println("====反序列化后======");
        System.out.println(dog);

        ois.close();
    }
}
class Dog implements Serializable{
    private String name;
    private int age;
    private String color;

    public Dog(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", color='" + color + '\'' +
                '}';
    }
}

标签:String,打印,dog,properties,new,Properties,out
From: https://blog.51cto.com/u_15784725/6319889

相关文章