JAVA基础之Properties类、序列化流及打印流、commons-IO
个人理解:
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的更多相关文章
- 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流
------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...
- java基础(25):Properties、序列化流、打印流、commons-IO
1. Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符 ...
- day1 java基础回顾- Properties类与配置文件
Properties配置文件说明 Properties类对应.properties文件.文件内容是键值对,键值对之间使用"="或空格隔开.开头是"#"的表示注释 ...
- Java基础 使用Properties类
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- Java基础之File类的使用
Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...
- 序列化流与反序列化流,打印流,工具类commons-IO
1序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 特 ...
- Java中的Properties类
目录 Java中的Properties类 前言 主要方法 读取Properties文件 相关实例 Java中的Properties类 前言 Java中的Properties类属于配置文件,以键值对的方 ...
- Java学习:Properties类
Java学习:Properties类 学习目标 认识properties文件,理解其含义,会正确创建properties文件. 会使用java.util.Properties类来操作propertie ...
随机推荐
- ACM学习历程——POJ 2376 Cleaning Shifts(贪心)
Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning ...
- 【Lintcode】038.Search a 2D Matrix II
题目: Write an efficient algorithm that searches for a value in an m x n matrix, return the occurrence ...
- 【LintCode】060.Search Insert Position
题目: Given a sorted array and a target value, return the index if the target is found. If not, return ...
- Linux命令汇总(二)
1.登录用户设置 新创建了一个用户,用useradd指令,但是发现通过终端无法登陆: echo password | passwd --stdin username 或者 passwd --st ...
- requests模拟上传照片
博客园相册管理中有上传照片的功能 现在通过requests库模拟上传图片功能 先手动上传图片,用Fiddler转包,查看到上传图片接口请求格式, ------WebKitFormBoundarySKZ ...
- qt 安装编译
项目编译的时候提示 cannot find -lGL sudo apt-get install libgl1-mesa-dev
- C#窗体控件拖动
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- MAF框架的使用限制
虽然MAF实现了插件式开发,动态热插拨,AppDomain隔离等诸多优点,但是正因为它复杂的功能机制也带来了很多其它方面的使用限制,下面列出官方给出的MAF框架的使用限制. 1) 在应用主程序显示的插 ...
- string.Format的困惑
今天在执行一个format时出现了这样一个问题,困惑了很久,就是 string.Format("{0:00}",“1”)结果是1 string.Format("{0:00 ...
- 《精通Spring4.X企业应用开发实战》读后感第一章
Rod Johnson在2002年,编写了interface21框架,spring就是基于此.Spring于2004年3月24日发布了1.0 Spring遵循的理念“”好的设计优于具体实现,代码应易于 ...