个人理解:

  Properties类是个存储String类型的键值对的集合类,可以用其存储一些关键的账号密码什么的,同时后面的注释可以很好的帮助理解,但是需要注意的是其文件中不能出现其他的符号,存用store,取用load;序列化与反序列化主要是用于把对象写入文本文件,或者从里面调出来。打印流只是输出流的一种,好处在于其可以自动刷新,还可以设置其换行。

一、Properties类:以file结尾的文件

1、特点:

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

②、该集合没有泛型,键值必须都是字符串String类型;

③、它是一个可以持久化的属性集,键值可以存储在集合中,也可以存储在持久化的设备上,键值的来源也可以是持久化的设备。

2、方法:

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

store(OutputStream,comments)把集合中的数据,保存到指定的流所对应的文件中,后面的参数代表对描述信息--一个注释,可以是空字符串!!!

#this is a person
#Tue Jun 18 11:25:59 CST 2019
age=123
name=zhangsan
#this is a person
#Tue Jun 18 11:27:39 CST 2019
name2=zhangsan
age2=123
import java.util.Properties;

public class Demo01 {
public static void main(String[] args) {
//搭配的文件是.properties文件(只能存String类键值对)里面的注释是# 不能写中文,并且里面的=前后不能有空格,不能出现什么; "",不允许换行等等
Properties pro=new Properties();
//往集合中存储键值对
pro.setProperty("a","1");
pro.setProperty("b", "2");
pro.setProperty("c", "3");
//从集合中取值
System.out.println(pro.getProperty("a"));
System.out.println(pro.getProperty("b"));
System.out.println(pro.getProperty("c")); }
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties; public class Demo02 {
public static void main(String[] args) throws IOException {
//明确数据源-相对路径不需要双\\,用/就行
FileInputStream fis=new FileInputStream("src/com/oracle/demo01/pro.properties");
//创建properties集合
Properties pro=new Properties();
//讲properties文件中的键值对存到properties集合中
pro.load(fis);
System.out.println(pro);//MAP子类,取出来无序
}
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties; public class Demo03 {
public static void main(String[] args) throws IOException {
//明确目的地
FileOutputStream fos=new FileOutputStream("src/com/oracle/demo01/pro.properties",true);
//创建集合
Properties pro=new Properties();
pro.setProperty("name2", "zhangsan");
pro.setProperty("age2", "123");
//将集合中的键值对存到集合中---注意的是键不可以重复!!!
pro.store(fos, "this is a person"); }
}

二、序列化流与反序列化流:

1、序列化ObjectOutputStream:将对象存到文件中,目的就是把对象存到本地(不是让您看懂);

      writeObject()往ObjectInputStream中存对象

2、反序列化ObjectInputStream:从文件中读出来

      readObject()从ObjectInputStream读取对象(需要向下转型)

3、序列化接口Serializable(标价接口,没有功能需要实现):

每个文件被解析的时候都会生成一个序列化号,当被序列化流时从流中获得的序列化号将与文件的序列化号进行比对,若不一样会产生序列化异常。解决方法:在类中定死序列化号就可以了。

4、瞬态关键字transient

同static类似,可以使属性不被序列化,当被写时,输出其初始化值。

package com.oracle.demo02;

import java.io.Serializable;

public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;//=后面的序列号可以随便改(静态最终Long类型的常量)
//瞬态关键字transient(效果同static)
private transient String name;
private static int 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 + "]";
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
} }
package com.oracle.demo02;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; public class Demo01 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
write();
read();
}
//序列化:将对象存到文件中,目的是将对象存到本地---静态后的不能序列化
public static void write() throws IOException {
// 序列化的前提:要序列化的类必须实现Serializable接口
// 明确目的地
FileOutputStream fos = new FileOutputStream("D:\\java\\person.txt");
// 创建对象
Person p = new Person("zhangsan", 18);
// 创建序列化流
ObjectOutputStream oos = new ObjectOutputStream(fos);
// 将Person对象写入文件中
oos.writeObject(p);
// 释放资源
oos.close();
}
//反序列化--从文件中读出来
public static void read() throws ClassNotFoundException, IOException{
//明确数据源
FileInputStream fis=new FileInputStream("D:\\java\\person.txt");
//创建反序列化流
ObjectInputStream ois=new ObjectInputStream(fis);
//将文件中的对象读到person对象中
Person p=(Person)ois.readObject();
System.out.println(p);
ois.close();
}
}

三、打印流:

 1、输出流的一种,只有输出目的,没有数据源。

  PrintStream、PrintWriter

方法:print、println()可以输出任意类型的数据

2、打印流完成数据自动刷新:

PrintWriter(OutStream/Writer,true)

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter; public class Demo02 {
public static void main(String[] args) throws FileNotFoundException {
//明确目的地
//开启续写功能
FileOutputStream fos=new FileOutputStream("D:\\java\\a.txt",true);
//开启自动刷新功能
PrintWriter pw=new PrintWriter(fos,true);
//向文件中写入字符串
pw.print(100);
pw.println(" ");
pw.print("ccc");
//释放资源
pw.close();
}
}

复制文件:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter; public class Copy {
public static void main(String[] args) throws IOException {
//明确数据源
FileReader fr=new FileReader("D:\\java\\a.txt");
//创建缓冲输入字符流
BufferedReader br=new BufferedReader(fr);
//明确目的地
FileWriter fw=new FileWriter("D:\\java\\aaa.txt");
//创建打印流--true是自动刷新
PrintWriter pw=new PrintWriter(fw,true);
//开始复制
String line=null;
while(((line)=br.readLine())!=null){
pw.println(line);
}
//释放资源
br.close();
pw.close();
}
}

四、commons-IO

1、导入:

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

2、FilenameUtils:处理文件名;

import org.apache.commons.io.FilenameUtils;

public class Demo01 {
public static void main(String[] args) {
// 获取文件扩展名
String ext = FilenameUtils.getExtension("D:\\java\\a.txt");
System.out.println("扩展名为" + ext);
// 获取文件名
String fname = FilenameUtils.getName("D:\\java\\a.txt");
System.out.println("文件名为" + fname);
// 判断扩展名
boolean flag = FilenameUtils.isExtension("D:\\java\\a.txt", "txt");
System.out.println(flag);
}
}

3、FileUtils:文件操作

import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils; public class Demo02 {
public static void main(String[] args) throws IOException {
copydir();
}
public static void read() throws IOException {
// 明确数据源
File file = new File("D:\\java\\a.txt");
// 从文件中读取数据
String content = FileUtils.readFileToString(file);
System.out.println(content);
}
public static void write() throws IOException{
//明确目的地
File file=new File("D:\\java\\a.txt");
FileUtils.writeStringToFile(file,"你好吗",true);
}
//复制文件夹
public static void copydir() throws IOException{
//明确数据源
File src=new File("D:\\java");
//明确目的地
File dest=new File("D:\\java2");
//开始复制
FileUtils.copyDirectoryToDirectory(src, dest);
}
}

JAVA基础之Properties类、序列化流及打印流、commons-IO的更多相关文章

  1. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  2. java基础(25):Properties、序列化流、打印流、commons-IO

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

  3. day1 java基础回顾- Properties类与配置文件

    Properties配置文件说明 Properties类对应.properties文件.文件内容是键值对,键值对之间使用"="或空格隔开.开头是"#"的表示注释 ...

  4. Java基础 使用Properties类

  5. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  6. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  7. 序列化流与反序列化流,打印流,工具类commons-IO

    1序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 特 ...

  8. Java中的Properties类

    目录 Java中的Properties类 前言 主要方法 读取Properties文件 相关实例 Java中的Properties类 前言 Java中的Properties类属于配置文件,以键值对的方 ...

  9. Java学习:Properties类

    Java学习:Properties类 学习目标 认识properties文件,理解其含义,会正确创建properties文件. 会使用java.util.Properties类来操作propertie ...

随机推荐

  1. 【Lintcode】094.Binary Tree Maximum Path Sum

    题目: Given a binary tree, find the maximum path sum. The path may start and end at any node in the tr ...

  2. jQuery 验证 Validation

    jQuery Validation 目录 简介: Form validation made easy. Validate a simple comment form with inline rules ...

  3. 蓝桥杯Log大侠(线段树单点区间更新)

    标题:Log大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... 变换的规则是: ...

  4. 设置一个.exe文件开机启动

    运行"regedit",编辑注册表 HKEY_LOCAL_MACHINE -- SOFTWARE -- Microsoft -- Windows -- CurrentVersion ...

  5. 深入理解和探究Java类加载机制

    深入理解和探究Java类加载机制---- 1.java.lang.ClassLoader类介绍 java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字 ...

  6. Hibernate 的HQL和sql有什么区别

    转自:https://blog.csdn.net/haozhugogo/article/details/54575802sql 面向数据库表查询 hql 面向对象查询 hql : from 后面跟的 ...

  7. [pe531]Chinese leftovers

    题意:1e6~1e6+5000之间任意两个之间同余方程组的解.余数为欧拉函数. 解题关键:线性筛预处理,扩展中国剩余定理暴力求解. #include<cstdio> #include< ...

  8. The web.config file for this project is missing the required DirectRequestModule.

    The web.config file for this project is missing the required DirectRequestModule.   将应用程序集的模式由集成改为经典 ...

  9. 英语学习Start

  10. 小议Python3的原生协程机制

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在最近发布的 Python 3.5 版本中,官方正式引入了 async/await关键字.在 asyncio ...