1. 打印流PrintStream 和 PrintWriter 636
打印流只有输出流,没有输入流
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
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