java基础8:properties集合,序列化,打印流,commons-IO,对应案例

来源:互联网 发布:php网页自动跳转代码 编辑:程序博客网 时间:2024/06/09 00:23


u Properties集合

u 序列化流与反序列化流

u 打印流

u commons-IO

第1章 Properties类

1.1 Properties类介绍

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

特点:

1、Hashtable的子类,map集合中的方法都可以用。

2、该集合没有泛型。键值都是字符串。

3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。

4、有和流技术相结合的方法。

 

l load(InputStream)  把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中

l load(Reader)  

l store(OutputStream,commonts)把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息

l stroe(Writer,comments);

代码演示:

/*

 *

 * Properties集合,它是唯一一个能与IO流交互的集合

 *

 * 需求:向Properties集合中添加元素,并遍历

 *

 * 方法:

 * public Object setProperty(String key, String value)调用Hashtable 的方法 put。

 * public Set<String> stringPropertyNames()返回此属性列表中的键集,

 * public String getProperty(String key)用指定的键在此属性列表中搜索属性

 */

public class PropertiesDemo01 {

public static void main(String[] args) {

//创建集合对象

Properties prop =new Properties();

//添加元素到集合

//prop.put(key, value);

prop.setProperty("周迅","张学友");

prop.setProperty("李小璐","贾乃亮");

prop.setProperty("杨幂","刘恺威");

//System.out.println(prop);//测试的使用

//遍历集合

Set<String> keys = prop.stringPropertyNames();

for (String key : keys) {

//通过键 找值

//prop.get(key)

String value = prop.getProperty(key);

System.out.println(key+"==" +value);

}

}

}

 

1.2 将集合中内容存储到文件

需求:使用Properties集合,完成把集合内容存储到IO流所对应文件中的操作

分析:

1,创建Properties集合

2,添加元素到集合

3,创建流

  4,把集合中的数据存储到流所对应的文件中

stroe(Writer,comments)

store(OutputStream,commonts)

把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息

5,关闭流

 

代码演示:

public class PropertiesDemo02 {

public static void main(String[] args) throws IOException {

//1,创建Properties集合

Properties prop =new Properties();

//2,添加元素到集合

prop.setProperty("周迅","张学友");

prop.setProperty("李小璐","贾乃亮");

prop.setProperty("杨幂","刘恺威");

//3,创建流

FileWriter out =new FileWriter("prop.properties");

//4,把集合中的数据存储到流所对应的文件中

prop.store(out,"save data");

//5,关闭流

out.close();

}

}

 

 

1.3 读取文件中的数据,并保存到集合

需求:从属性集文件prop.properties 中取出数据,保存到集合中

分析:

1,创建集合

2,创建流对象

3,把流所对应文件中的数据 读取到集合中

load(InputStream)  把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中

load(Reader)  

4,关闭流

5,显示集合中的数据

代码演示:

public class PropertiesDemo03 {

public static void main(String[] args) throws IOException {

//1,创建集合

Properties prop =new Properties();

//2,创建流对象

FileInputStream in =new FileInputStream("prop.properties");

//FileReader in = new FileReader("prop.properties");

//3,把流所对应文件中的数据 读取到集合中

prop.load(in);

//4,关闭流

in.close();

//5,显示集合中的数据

System.out.println(prop);

}

}

注意:使用字符流FileReader就可以完成文件中的中文读取操作了

第2章 序列化流与反序列化流

用于从流中读取对象的

操作流 ObjectInputStream    称为 反序列化流

用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流

l 特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。

2.1 对象序列化流ObjectOutputStream

ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

注意:只能将支持 java.io.Serializable 接口的对象写入流中

 

 

l 代码演示:

public class ObjectStreamDemo {

public static void main(String[] args) throws IOException, ClassNotFoundException {

/*

 * 将一个对象存储到持久化(硬盘)的设备上。

 */

writeObj();//对象的序列化。

}

public static void writeObj()throws IOException {

//1,明确存储对象的文件。

FileOutputStream fos =new FileOutputStream("tempfile\\obj.object");

//2,给操作文件对象加入写入对象功能。

ObjectOutputStream oos =new ObjectOutputStream(fos);

//3,调用了写入对象的方法。

oos.writeObject(new Person("wangcai",20));

//关闭资源。

oos.close();

}

}

l Person类

public class Personimplements Serializable {

private Stringname;

private int age;

public Person() {

super();

}

public Person(String name,int age) {

super();

this.name = name;

this.age = age;

}

 

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Person [name=" + name +", age=" +age +"]";

}

}

 

2.2 对象反序列化流ObjectInputStream

ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。支持 java.io.Serializable接口的对象才能从流读取。

 

 

原理图




l 代码演示

public class ObjectStreamDemo {

public static void main(String[] args) throws IOException, ClassNotFoundException {

readObj();//对象的反序列化。

}

public static void readObj()throws IOException, ClassNotFoundException {

//1,定义流对象关联存储了对象文件。

FileInputStream fis =new FileInputStream("tempfile\\obj.object");

//2,建立用于读取对象的功能对象。

ObjectInputStreamois =new ObjectInputStream(fis);

Person obj = (Person)ois.readObject();

System.out.println(obj.toString());

}

}

2.3 序列化接口

当一个对象要能被序列化,这个对象所属的类必须实现Serializable接口。否则会发生异常NotSerializableException异常。

同时当反序列化对象时,如果对象所属的class文件在序列化之后进行的修改,那么进行反序列化也会发生异常InvalidClassException。发生这个异常的原因如下:

l 该类的序列版本号与从流中读取的类描述符的版本号不匹配

l 该类包含未知数据类型

l 该类没有可访问的无参数构造方法

Serializable标记接口。该接口给需要序列化的类,提供了一个序列版本号。serialVersionUID. 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

 

l 代码修改如下,修改后再次写入对象,读取对象测试

public class Personimplements Serializable {

//给类显示声明一个序列版本号。

private static final long serialVersionUID = 1L;

private Stringname;

private int age;

public Person() {

super();

}

public Person(String name,int age) {

super();

this.name = name;

this.age = age;

}

 

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Person [name=" + name +", age=" +age +"]";

}

}

2.4 瞬态关键字transient

当一个类的对象需要被序列化时,某些属性不需要被序列化,这时不需要序列化的属性可以使用关键字transient修饰。只要被transient修饰了,序列化时这个属性就不会琲序列化了。

同时静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化。

l 代码修改如下,修改后再次写入对象,读取对象测试

public class Personimplements Serializable {

/*

 * 给类显示声明一个序列版本号。

 */

private static final long serialVersionUID = 1L;

private static Stringname;

private transient/*瞬态*/ int age;

public Person() {

super();

}

public Person(String name,int age) {

super();

this.name = name;

this.age = age;

}

 

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

 

@Override

public String toString() {

return "Person [name=" + name +", age=" +age +"]";

}

}

第3章 打印流

3.1 打印流的概述

打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.

打印流根据流的分类:

l 字节打印流 PrintStream

l 字符打印流 PrintWriter

l 方法:

void print(String str): 输出任意类型的数据,

void println(String str): 输出任意类型的数据,自动写入换行操作

l 代码演示:

 /*

 * 需求:把指定的数据,写入到printFile.txt文件中

 *

 * 分析:

 *1,创建流

 *2,写数据

 *3,关闭流

 */

public class PrintWriterDemo {

public static void main(String[] args) throws IOException {

//创建流

//PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));

PrintWriter out =new PrintWriter("printFile.txt");

//2,写数据

for (int i=0; i<5; i++) {

out.println("helloWorld");

}

//3,关闭流

out.close();

}

}

3.2 打印流完成数据自动刷新

可以通过构造方法,完成文件数据的自动刷新功能

l 构造方法:

l 开启文件自动刷新写入功能

public PrintWriter(OutputStream out, boolean autoFlush)

public PrintWriter(Writer out, boolean autoFlush)

l 代码演示:

 /*

 * 分析:

 *1,创建流

 *2,写数据

 */

public class PrintWriterDemo2 {

public static void main(String[] args) throws IOException {

//创建流

PrintWriter out =new PrintWriter(new FileWriter("printFile.txt"),true);

//2,写数据

for (int i=0; i<5; i++) {

out.println("helloWorld");

}

//3,关闭流

out.close();

}

}

第4章 commons-IO

4.1 导入classpath

加入classpath的第三方jar包内的class文件才能在项目中使用

创建lib文件夹

将commons-io.jar拷贝到lib文件夹

右键点击commons-io.jar,Build Path→Add to Build Path

4.2 FilenameUtils

这个工具类是用来处理文件名(译者注:包含文件路径)的,他可以轻松解决不同操作系统文件名称规范不同的问题

l 常用方法:

getExtension(String path):获取文件的扩展名;

getName():获取文件名;

isExtension(String fileName,String ext):判断fileName是否是ext后缀名;

4.3 FileUtils

提供文件操作(移动文件,读取文件,检查文件是否存在等等)的方法。

l 常用方法:

readFileToString(File file):读取文件内容,并返回一个String;

writeStringToFile(File file,String content):将内容content写入到file中;

copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制

copyFile(File srcFile,File destFile);文件夹复制

l 代码演示:

/*

 * 完成文件的复制

 */

public class CommonsIODemo01 {

public static void main(String[] args) throws IOException {

//method1("D:\\test.avi", "D:\\copy.avi");

//通过Commons-IO完成了文件复制的功能

FileUtils.copyFile(new File("D:\\test.avi"),new File("D:\\copy.avi"));

}

 

//文件的复制

private static void method1(String src, String dest) throws IOException {

//1,指定数据源

BufferedInputStream in =new BufferedInputStream(new FileInputStream(src));

//2,指定目的地

BufferedOutputStream out =new BufferedOutputStream(new FileOutputStream(dest));

//3,读

byte[] buffer =new byte[1024];

int len = -1;

while ( (len = in.read(buffer)) != -1) {

//4,写

out.write(buffer, 0, len);

}

//5,关闭流

in.close();

out.close();

}

}

 

/*

 * 完成文件、文件夹的复制

 */

public class CommonsIODemo02 {

public static void main(String[] args) throws IOException {

//通过Commons-IO完成了文件复制的功能

FileUtils.copyFile(new File("D:\\test.avi"),new File("D:\\copy.avi"));

//通过Commons-IO完成了文件夹复制的功能

//D:\基础班 复制到 C:\\abc文件夹下

FileUtils.copyDirectoryToDirectory(new File("D:\\基础班"),new File("C:\\abc"));

}

}

第5章 总结

5.1 IO流总结

l 字节流

l 字节输入流 InputStream

l FileInputStream 操作文件的字节输入流

l BufferedInputStream高效的字节输入流

l ObjectInputStream 反序列化流

l 字节输出流 OutputStram

l FileOutputStream 操作文件的字节输出流

l BufferedOutputStream 高效的字节输出流

l ObjectOuputStream 序列化流

l PrintStream 字节打印流

l 字符流

l 字符输入流 Reader

l FileReader 操作文件的字符输入流

l BufferedReader 高效的字符输入流

l InputStreamReader 输入操作的转换流(把字节流封装成字符流)

l 字符输出流 Writer

l FileWriter 操作文件的字符输出流

l BufferedWriter 高效的字符输出流

l OutputStreamWriter 输出操作的转换流(把字节流封装成字符流)

l PrintWriter 字符打印流

 

l 方法:

l 读数据方法:

l read() 一次读一个字节或字符的方法

l read(byte[]  char[]) 一次读一个数组数据的方法

l readLine() 一次读一行字符串的方法(BufferedReader类特有方法)

l readObject() 从流中读取对象(ObjectInputStream特有方法)

l 写数据方法:

l write(int) 一次写一个字节或字符到文件中

l write(byte[] char[]) 一次写一个数组数据到文件中

l write(String) 一次写一个字符串内容到文件中

l writeObject(Object ) 写对象到流中(ObjectOutputStream类特有方法)

l newLine() 写一个换行符号(BufferedWriter类特有方法)

 

l 向文件中写入数据的过程

1,创建输出流对象

2,写数据到文件

3,关闭输出流

l 从文件中读数据的过程

1, 创建输入流对象

2, 从文件中读数据

3, 关闭输入流

 

l 文件复制的过程

1, 创建输入流(数据源)

2, 创建输出流(目的地)

3, 从输入流中读数据

4, 通过输出流,把数据写入目的地

5, 关闭流

 

l File类

l 方法

l 获取文件名称 getName()

l 获取文件绝对路径 getAbsolutePath()

l 获取文件大小 length()

l 获取当前文件夹中所有File对象  File[] listFiles()

l 判断是否为文件 isFile()

l 判断是否为文件夹 isDirectory()

l 创建文件夹 mkdir()  mkdirs()

l 创建文件 createNewFile()

 

l 异常

l try..catch…finally捕获处理异常

l throws 声明异常

l throw 抛出异常对象

 

l 异常的分类

l 编译期异常 Exception

|- 运行期异常 RuntimeException

 

l 注意:

编译期异常,必须处理,不然无法编译通过

运行期异常,程序运行过程中,产生的异常信息

 

l Properties:Map集合的一种,它是Hashtable集合的子集合,它键与值都是String类型,它是唯一能与IO流结合使用的集合

l 方法

l load( InputStream in ) 从流所对应的文件中,读数据到集合中

l load( Reader in ) 从流所对应的文件中,读数据到集合中

l store( OutputStream out , String message ) 把集合中的数据,写入到流所对应的文件中

l store( Writer out , String message) 把集合中的数据,写入到流所对应的文件中

 

l 实现文件内容的自动追加

l 构造方法

l FileOutputStream(File file, boolean append)

l FileOutputStream(String fileName, boolean append)

l FileWriter(File, boolean append)

l FileWriter(String fileName, boolean append)

l 实现文件内容的自动刷新

l 构造方法

l PrintStream(OutputStream out, boolean autoFlush)

l PrintWriter(OutputStream out, boolean autoFlush)

l PrintWriter(Writer out, boolean autoFlush)

 

l Commons-IO

l 方法

l readFileToString(File file):读取文件内容,并返回一个String;

l writeStringToFile(File file,String content):将内容content写入到file中;

l copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制

l copyFileToDirectory (File srcFile,File destFile);文件复制

 

 附上案例源码


###01Properties集合的特点
* A: Properties集合的特点
* a: Properties类介绍
* Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串
* b: 特点
* Hashtable的子类,map集合中的方法都可以用。
* 该集合没有泛型。键值都是字符串。
* 它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
* 有和流技术相结合的方法。
* c: 方法介绍
* load(InputStream inputStream)  把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中
* load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
* store(OutputStream outputStream,String commonts) 把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息
* stroe(Writer writer,String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符





###02Properties集合存储键值对
* A: Properties集合存储键值对
* a: 方法介绍
*  集合对象Properties类,继承Hashtable,实现Map接口
*  可以和IO对象结合使用,实现数据的持久存储
* 使用Properties集合,存储键值对
* setProperty等同与Map接口中的put
* setProperty(String key, String value)
* 通过键获取值, getProperty(String key)
* b: 案例代码
public class PropertiesDemo {
public static void main(String[] args)throws IOException {
function_2();
}
/*
* 使用Properties集合,存储键值对
* setProperty等同与Map接口中的put
* setProperty(String key, String value)
* 通过键获取值, getProperty(String key)
*/
public static void function(){
Properties pro = new Properties();
pro.setProperty("a", "1");
pro.setProperty("b", "2");
pro.setProperty("c", "3");
System.out.println(pro);

String value = pro.getProperty("c");
System.out.println(value);

//方法stringPropertyNames,将集合中的键存储到Set集合,类似于Map接口的方法keySet
Set<String> set = pro.stringPropertyNames();
for(String key : set){
System.out.println(key+"..."+pro.getProperty(key));
}
}
}



###03Properties集合的方法load
* A: Properties集合的方法load
* a: 方法介绍
* Properties集合特有方法 load
* load(InputStream in)
* load(Reader r)
* 传递任意的字节或者字符输入流
* 流对象读取文件中的键值对,保存到集合

* b: 案例代码
public class PropertiesDemo {
public static void main(String[] args)throws IOException {
function_1();
}
/*
* Properties集合特有方法 load
* load(InputStream in)
* load(Reader r)
* 传递任意的字节或者字符输入流
* 流对象读取文件中的键值对,保存到集合
*/
public static void function_1()throws IOException{
Properties pro = new Properties();
FileReader fr = new FileReader("c:\\pro.properties");
//调用集合的方法load,传递字符输入流
pro.load(fr);
fr.close();
System.out.println(pro);
}
}


###04Properties集合的方法store
* A: Properties集合的方法store
* a: 方法介绍
* Properties集合的特有方法store
* store(OutputStream out)
* store(Writer w)
* 接收所有的字节或者字符的输出流,将集合中的键值对,写回文件中保存
* b: 案例代码
public class PropertiesDemo {
public static void main(String[] args)throws IOException {
function_2();
}
/*
* Properties集合的特有方法store
* store(OutputStream out)
* store(Writer w)
* 接收所有的字节或者字符的输出流,将集合中的键值对,写回文件中保存
*/
public static void function_2()throws IOException{
Properties pro = new Properties();
pro.setProperty("name", "zhangsan");
pro.setProperty("age", "31");
pro.setProperty("email", "123456789@163.com");
FileWriter fw = new FileWriter("c:\\pro.properties");
//键值对,存回文件,使用集合的方法store传递字符输出流
pro.store(fw, "");
fw.close();
}
}




###05对象的序列化与反序列化
* A: 对象的序列化与反序列化
* a: 基本概念
* 对象的序列化
* 对象中的数据,以流的形式,写入到文件中保存过程称为写出对象,对象的序列化
* ObjectOutputStream将对象写道文件中,实现序列化
* 对象的反序列化
* 在文件中,以流的形式,将对象读出来,读取对象,对象的反序列化
* ObjectInputStream 将文件对象读取出来

###06ObjectOutputStream流写对象
* A: ObjectOutputStream流写对象
* a: 简单介绍
*  IO流对象,实现对象Person序列化,和反序列化
*  ObjectOutputStream 写对象,实现序列化
*  ObjectInputStream 读取对象,实现反序列化


* b: 案例代码
public class Person implements Serializable{
public String name;
public int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person(){}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}

public class ObjectStreamDemo {
public static void main(String[] args)throws IOException, ClassNotFoundException {
// writeObject();
readObject();
}
/*
* ObjectOutputStream
* 构造方法: ObjectOutputStream(OutputSteam out)
* 传递任意的字节输出流
* void writeObject(Object obj)写出对象的方法
*/
public static void writeObject() throws IOException{
//创建字节输出流,封装文件
FileOutputStream fos = new FileOutputStream("c:\\person.txt");
//创建写出对象的序列化流的对象,构造方法传递字节输出流
ObjectOutputStream oos = new ObjectOutputStream(fos);
Person p = new Person("lisi",25);
//调用序列化流的方法writeObject,写出对象
oos.writeObject(p);
oos.close();
}
}

###07ObjectInputStream流读取对象
* A: ObjectInputStream流读取对象
* a: 简单介绍
* ObjectInputStream
* 构造方法:ObjectInputStream(InputStream in)
* 传递任意的字节输入流,输入流封装文件,必须是序列化的文件
* Object readObject()  读取对象
* b: 案例代码
/*
*  IO流对象,实现对象Person序列化,和反序列化
*  ObjectOutputStream 写对象,实现序列化
*  ObjectInputStream 读取对象,实现反序列化
*/
public class ObjectStreamDemo {
public static void main(String[] args)throws IOException, ClassNotFoundException {
readObject();
}
/*
* ObjectInputStream
* 构造方法:ObjectInputStream(InputStream in)
* 传递任意的字节输入流,输入流封装文件,必须是序列化的文件
* Object readObject()  读取对象
*/
public static void readObject() throws IOException, ClassNotFoundException{
FileInputStream fis = new FileInputStream("c:\\person.txt");
//创建反序列化流,构造方法中,传递字节输入流
ObjectInputStream ois = new ObjectInputStream(fis);
//调用反序列化流的方法 readObject()读取对象
Object obj =ois.readObject();
System.out.println(obj);
ois.close();
}
}

###08静态不能序列化
* A: 静态不能序列化
* a: 原因
* 序列化是把对象数据进行持久化存储
* 静态的东西不属于对象,而属于类
 
###09transient关键字
* A: transient关键字
* a: 作用
* 被transient修饰的属性不会被序列化
* transient关键字只能修饰成员变量


###10Serializable接口的含义
* A:Serializable接口的含义
* a: 作用
* 给需要序列化的类上加标记。该标记中没有任何抽象方法
* 只有实现了 Serializable接口的类的对象才能被序列化

###11序列化中的序列号冲突问题
* A: 序列化中的序列号冲突问题
* a: 问题产生原因
* 当一个类实现Serializable接口后,创建对象并将对象写入文件,之后更改了源代码(比如:将成员变量的修饰符有private改成public),
再次从文件中读取对象时会报异常
* 见day25_source文件夹下的"序列号的冲突.JPG"文件


###12序列化中自定义的序列号
* A: 序列化中自定义的序列号
* a: 定义方式
* private static final long serialVersionUID = 1478652478456L;
* 这样每次编译类时生成的serialVersionUID值都是固定的

* b: 案例代码
public class Person implements Serializable{
public String name;
public /*transient阻止成员变量序列化*/ int age;
//类,自定义了序列号,编译器不会计算序列号
private static final long serialVersionUID = 1478652478456L;


public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person(){}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}


###13打印流和特性
* A: 打印流和特性
* a: 概述
* 打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.
* 打印流根据流的分类:
* 字节打印流 PrintStream
* 字符打印流 PrintWriter
* 方法:
* void print(String str): 输出任意类型的数据,
* void println(String str): 输出任意类型的数据,自动写入换行操作
* b: 特点
* 此流不负责数据源,只负责数据目的
* 为其他输出流,添加功能
* 永远不会抛出IOException,但是可能抛出别的异常  
* 两个打印流的方法,完全一致
* 构造方法,就是打印流的输出目的端
* PrintStream构造方法
* 接收File类型,接收字符串文件名,接收字节输出流OutputStream
* PrintWriter构造方法
* 接收File类型,接收字符串文件名,接收字节输出流OutputStream, 接收字符输出流Writer



###14打印流输出目的是File对象
* A: 打印流输出目的是File对象
* a: 案例代码
public class PrintWriterDemo {
public static void main(String[] args) throws  IOException {
function_3();


}

/*
* 打印流,向File对象的数据目的写入数据
* 方法print println  原样输出
* write方法走码表
*/
public static void function() throws FileNotFoundException{
File file = new File("c:\\1.txt");
PrintWriter pw = new PrintWriter(file);
pw.println(true);
pw.write(100);
pw.close();
}
}

###15输出语句是char数组
* A: 输出语句是char数组
* a: 案例代码
public class Demo {
public static void main(String[] args) {
int[] arr = {1};
System.out.println(arr);

char[] ch = {'a','b'};
System.out.println(ch);

byte[] b = {};
System.out.println(b);
}
}
* b: 结果分析
* println数组,只有打印字符数组时只有容,其余均打印数组的地址
* 因为api中定义了打印字符数组的方法,其底层是在遍历数组中的元素
* 而其他打印数组的方法,都是将数组对象编程Object,其底层再将对象编程String,调用了String s = String.valueOf(x);方法

###16打印流输出目的是String和流对象
* A: 打印流输出目的是String和流对象
* a: 案例代码
public class PrintWriterDemo {
public static void main(String[] args) throws  IOException {
function_2();


}

/*
* 打印流,输出目的,是流对象
* 可以是字节输出流,可以是字符的输出流
* OutputStream  Writer
*/
public static void function_2() throws IOException{
// FileOutputStream fos = new FileOutputStream("c:\\3.txt");
FileWriter fw = new FileWriter("c:\\4.txt");
PrintWriter pw = new PrintWriter(fw);
pw.println("打印流");
pw.close();
}
/*
* 打印流,输出目的,String文件名
*/
public static void function_1() throws FileNotFoundException{
PrintWriter pw = new PrintWriter("c:\\2.txt");
pw.println(3.5);
pw.close();
}

}

###17打印流开启自动刷新
* A: 打印流开启自动刷新
* 案例代码
public class PrintWriterDemo {
public static void main(String[] args) throws  IOException {
function_3();


}
/* 
* 打印流,可以开启自动刷新功能
* 满足2个条件:
*   1. 输出的数据目的必须是流对象
*       OutputStream  Writer
*   2. 必须调用println,printf,format三个方法中的一个,启用自动刷新
*/
public static void function_3()throws  IOException{
//File f = new File("XXX.txt");
FileOutputStream fos = new FileOutputStream("c:\\5.txt");
PrintWriter pw = new PrintWriter(fos,true);
pw.println("i");
pw.println("love");
pw.println("java");
pw.close();
}
}

###18打印流复制文本文件
* A: 打印流复制文本文件
* a: 案例代码
/*
* 打印流实现文本复制
*   读取数据源  BufferedReader+File 读取文本行
*   写入数据目的 PrintWriter+println 自动刷新
*/
public class PrintWriterDemo1 {
public static void main(String[] args) throws IOException{
BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("d:\\a.txt"),true);
String line = null;
while((line = bfr.readLine())!=null){
pw.println(line);
}
pw.close();
bfr.close();
}
}

###19commons-io工具类介绍
* A: commons-io工具类介绍
* a: 工具类介绍
* 解压缩commons-io-2.4.zip文件
* commons-io-2.4.jar需要导入到项目中的jar包,里面存放的是class文件
* commons-io-2.4-sources.jar工具类中原代码
* docs是帮助文档

###20使用工具类commons_io
* A: 使用工具类commons_io
* a: 导入jar包
* 加入classpath的第三方jar包内的class文件才能在项目中使用
* 创建lib文件夹
* 将commons-io.jar拷贝到lib文件夹
* 右键点击commons-io.jar,Build Path→Add to Build Path
* b: 学会如何看源代码


###21IO工具类FilenameUtils
* A: IO工具类FilenameUtils
* a: 方法介绍
* getExtension(String path):获取文件的扩展名;
* getName():获取文件名;
* isExtension(String fileName,String ext):判断fileName是否是ext后缀名;
* b: 案例代码
public class Commons_IODemo {
public static void main(String[] args) {
function_2();
}
/*
* FilenameUtils类的方法
* static boolean isExtension(String filename,String extension)
* 判断文件名的后缀是不是extension
*/
public static void function_2(){
boolean b = FilenameUtils.isExtension("Demo.java", "java");
System.out.println(b);
}

/*
* FilenameUtils类的方法
* static String getName(String filename)
* 获取文件名
*/
public static void function_1(){
String name = FilenameUtils.getName("c:\\windows\\");
System.out.println(name);
}

/*
* FilenameUtils类的方法
* static String getExtension(String filename)
* 获取文件名的扩展名
*/
public static void function(){
String name = FilenameUtils.getExtension("c:\\windows");
System.out.println(name);
}
}


###22IO工具类FileUtils
* A: IO工具类FileUtils
* a: 方法介绍
* readFileToString(File file):读取文件内容,并返回一个String;
* writeStringToFile(File file,String content):将内容content写入到file中;
* copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
* copyFile(File srcFile,File destFile);文件复制

* b: 案例代码
public class Commons_IODemo1 {
public static void main(String[] args)throws IOException {
function_3();
}
/*
* FileUtils工具类方法
* static void copyDirectoryToDirectory(File src,File desc)
* 复制文件夹
*/
public static void function_3() throws IOException{
FileUtils.copyDirectoryToDirectory(new File("d:\\demo"), new File("c:\\"));
}

/*
* FileUtils工具类的方法
* static void copyFile(File src,File desc)
* 复制文件
*/
public static void function_2() throws IOException{
FileUtils.copyFile(new File("c:\\k.jpg"),new File("d:\\k.jpg"));
}

/*
* FileUtils工具类的方法
* static void writeStringToFile(File src,String date)
* 将字符串直接写到文件中
*/
public static void function_1() throws IOException{
FileUtils.writeStringToFile(new File("c:\\b.txt"),"我爱Java编程");
}

/*
* FileUtils工具类的方法
* static String readFileToString(File src)读取文本,返回字符串
*/
public static void function() throws IOException{
String s = FileUtils.readFileToString(new File("c:\\a.txt"));
System.out.println(s);
}
}



阅读全文
0 0
原创粉丝点击