1.印刷流PrintStream和PrintWriter636
打印流只有输出流,没有输入流
1.1应用实例Printstream字节输出打印流636代码.stulzl.printstream_.包中Printstream_
package com.stulzl.printstream_;import java.io.IOException;import java.io.PrintStream;///应用实例Printstream字节输出打印流/输出流 636public 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代码.stulzl.printwriter_.PrintWriter_
package com.stulzl.printwriter_;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;///应用案例PrintWriter字符输出打印流 637public 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.100user=rootpwd=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= 编程读ip12345/. user和pwd的publicc值是多少? 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.2Properties基本介绍639
1)专门用于读写配置文件的集合类
配置文件格式:
键=值
键=值
2)注意:键值不需要空格,值不需要用引号。默认类型是String。
3)Properties的常见方法
load:对Properties对象加载配置文件的键值
list:向指定设备显示数据
getProperty(key):按键获取值
setProperty(key,value):将键值设置为Properties对象
store:如果将Properties中的键值存储到配置文件中,并将信息保存到配置文件中
它含有中文,并将其存储为unicode码
http://tool.chinaz.com/tools/unicode.aspxunicode码查询工具
2.2.1案例应用11.使用Properties完成mysqlles.读取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完成对mysqles.读取properties,639public class Properties02 { public static void main(String[] args) throws IOException { ///使用Properties完成mysqlles.读取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案例应用2640
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-valpublic 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.练习1641
(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):\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.练习2642
要求:用bufferedreader读取文本文件,为每行添加行号,然后与内容一起输出到屏幕上。如果文件的编码改为gbk,中文乱码出现,我们应该考虑如何解决
1.默认按utf-8处理,一开始没有乱码
2.提示:使用我们的转换流,将FileinputStream用于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.练习3643
(1)写dog.properties
name=tom
age=5
color=red
(2)编写Dog类(name,age,color)创建dog对象,读取dog.properties用相应的内容完成
成属性初始化,输出
(3)将创建的Dog对象序列化为文件Dog.dat文件
com中的代码.stulzl.exercise03Exercise03
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.publicicdat文件 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 + '\'' + '}'; }}