个人理解:

  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. ACM学习历程—Hihocoder 1164 随机斐波那契(数学递推)

    时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: a0 = 1, a1 = 1, ai = ai-1 + ai-2,(i > 1). ...

  2. ACM学习历程—HDU1003 Max Sum(dp && 最大子序列和)

    Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub ...

  3. 闪回之 Flashback Query (dml表、过程、函数、包等)、Flashback version Query

    Flashback Query 背景:Flashback 是 ORACLE 自 9i 就开始提供的一项特性,在 9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数 ...

  4. 百度地图API的第一次接触——热区

    1.代码很简单 var map = new BMap.Map("container"); var point = new BMap.Point(116.404, 39.915); ...

  5. python :字符串,列表,元组,集合,字典

    字符串方法: 字符串是一个有序的,不可修改的,元素是以引号包围的序列.单引号,双引号,三引号,str生成 字符串的修饰   a='novo gene' a.center() 让字符串在指定的长度居中显 ...

  6. 【hdu4570】Multi-bit Trie 区间DP

    标签: 区间dp hdu4570 http://acm.hdu.edu.cn/showproblem.php?pid=4570 题意:这题题意理解变态的.转自大神博客: 这题题意确实有点难懂,起码对于 ...

  7. 如何让IntPtr指向一块内存,以及托管内存与非托管内存的相互转化

    IntPtr idp= IntPtr.Zero; StringBuilder idata = new StringBuilder("000000"); string idata = ...

  8. ACM-ICPC2018北京网络赛 80 Days(双端队列+尺取)

    题目4 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules Ve ...

  9. js选中select

    function selected(id, val) { $('#' + id + ' option[value="' + val + '"]').attr('selected', ...

  10. CV codes代码分类整理合集 《转》

    from:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction:   SIFT [1] [Demo program] ...