一.Properties 类(java.util)
     概述:Properties 是一个双列集合;Properties 属于map的特殊的孙子类;Properties 类没有泛型,properties集合的key和value都是固定的数据类型(String),该集合提供了一些特有的方法存取值,是唯一一个可以与IO流相结合的集合;

定义:public class Properties extends Hashtable 注: public class Hashtable extends Dictionary implements Map, Cloneable, Serializable 构造方法:Properties():创建一个无默认值的空属性列表

[注: public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
]

构造方法:Properties():创建一个无默认值的空属性列表

常用方法:
         特有方法: public String getProperty(String key){}:用指定的键在此属性列表中搜索属性
                   public Object setProperty(String key, String value){}:调用 Hashtable 的方法 put()向集合中存键值对;
                   public Set<String> stringPropertyNames(){}:返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。
         与IO流结合的方法:
                 public void load(InputStream instream) throws IOException{}:从输入流中读取属性列表(键和元素对)。(文件-->集合)
                 public void load(Reader reader) throws IOException{}:按简单的面向行的格式从输入字符流中读取属性列表(键和元素对). (文件-->集合)
                 public void store(OutputStream out, String comments) throws IOException{}:以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。Comments 是对整个文件的解释说明的话,不能写中文,因为固定使用ISO8859-1的编码,一般直接写""; (集合-->文件)
                 public void store(Writer writer, String comments) throws IOException{}:以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。(集合-->文件)
     注意事项:
             1:一般情况下如果一个文件与properties集合相结合,那么文件的后缀名是:.properties;
             也可以自定义后缀名;如果后缀名是:.properties;那么文件中的内容自动使用ISO8859-1编码;
             如果后缀名是其他的,文件使用工作空间默认的编码;使用load方法,加载数据的时候,注释的内容会被忽略;
             2:与properties集合结合的文件中的数据格式,必须以键值对的形式存在;
     代码演示1:

  1 /*
2 Properties的基本使用:创建/添加/取值/迭代
3 */
4 import java.util.Properties;
5 import java.util.Set;
6 public class PropertiesDemo{
7 public static void main(String[] args){
8 //创建Properties集合对象
9 Properties p = new Properties();
10 //向集合中添加元素
11 p.setProperty("1","Jack");
12 p.setProperty("2","Rose");
13 p.setProperty("3","Smith");
14 //取值
15 String name = p.getProperty("1");
16 System.out.println(name);//Jack
17 //迭代
18 //把键值取出stringPropertyNames(),返回set集合
19 Set<String> keySet = p.stringPropertyNames();
20 for(String s : keySet){
21 System.out.println(s+"===>"+p.getProperty(s));
22 }
23 }
24 }

代码演示2:

  1 /*
2 向Properties集合中添加元素并以字节流的形式存入到硬盘文件(txt,GBK)
3 再读取到集合中
4 */
5 import java.util.Properties;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.FileInputStream;
9 public class PropertiesDemo02{
10 public static void main(String[] args) throws IOException{
11 //创建Properties集合
12 Properties p = new Properties();
13 //向集合中添加元素
14 p.setProperty("1","Rose");
15 p.setProperty("2","Jack");
16 //创建基本输出字节流
17 FileOutputStream fout = new FileOutputStream("names.txt");//如果不是.properties结尾的文件默认为工作空间的编码格式
18 //存入磁盘
19 p.store(fout,"");
20 //关闭流
21 fout.close();
22
23 //创建基本输入字节流
24 FileInputStream fin = new FileInputStream("names.txt");
25 //读入集合
26 p.load(fin);
27 //关闭流
28 fin.close();
29 System.out.println(p);//{2=Jack, 1=Rose}
30 }
31 }

二.记住四套继承关系:
     字节流两套:
         java.lang.Object--java.io.OutputStream--java.io.FileOutputStream
         java.lang.Object--java.io.InputStream--java.io.FileInputStream
     高效字节流两套:
         java.lang.Object--java.io.OutputStream--java.io.FilterOutputStream--java.io.BufferedOutputStream
         java.lang.Object--java.io.InputStream--java.io.FilterInputStream--java.io.BufferedInputStream
     字符流两套:
         java.lang.Object--java.io.Writer--java.io.OutputStreamWriter (转换流)--java.io.FileWriter
         java.lang.Object--java.io.Reader--java.io.InputStreamReader  (转换流)--java.io.FileReader
     缓冲字符流两套:
         java.lang.Object--java.io.Writer--java.io.BufferedWriter
         java.lang.Object--java.io.Reader--java.io.BufferedReader

三.转换流 
     按照方向,转换流可以分为:
         用于读数据的转换流,字节流-->字符流的桥梁!
         用于写数据的转换流,字符流-->字节流的桥梁!
     Java 中的类:
         OutputStreamWriter(程序-->硬盘 写数据 字符流对象转换成字节流对象)
         InputStreamReader (硬盘-->程序 读数据 将输入的字节流变为字符流)
         两个转换流都属于字符流的范畴;
     作用:可以读或写指定编码的文件!
    
     OutputStreamWriter 有一个直接子类:FileWriter;  Writer--OutputStreamWriter--FileWriter
     InputStreamReader 有一个直接子类:FileReader;    Reader--InputStreamReader--FileReader
     适用场景:
         当不需要考虑编码的时候,建议使用子类;
         如果需要考虑编码的时候,使用父类(OutputStreamWriter/OutputStreamReader 转换流);

四.OutputStreamWriter 类(java.io)
     介绍:OutputStreamWriter 主要用于向硬盘中写指定编码格式的信息;
     定义:public class OutputStreamWriter extends Writer
     构造方法:
             OutputStreamWriter(OutputStream out, String charsetName):创建使用指定字符集的 OutputStreamWriter。
             OutputStreamWriter(OutputStream out):创建使用默认字符编码的 OutputStreamWriter。
     常用方法:
             public void close() throws IOException(){}:关闭流(关闭前先刷新);
             public void flush() throws IOException(){}:刷新流;
             public void write(char[] cbuf, int off, int len){}:写入字符数组的某一部分
             public void write(int c) throws IOException(){}:写入单个字符
               public void write(String str, int off, int len){}:写入字符串的某一部分
             注意:write()方法可以直接写入字符串,但是read()方法不能直接读取,需转成char[]

五.InputStreamReader 类(java.io)
     介绍:InputStreamReader 主要用于从硬盘中读指定编码格式的信息. 构造时可以指定字符集编码
     定义:public class InputStreamReader extends Reader
     构造方法:
         InputStreamReader(InputStream in, String charsetName):创建使用指定字符集的 InputStreamReader。
         InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
     常用方法:
         public void close() throws IOException{}:关闭流
         public int read() throws IOException{}:读取单个字符
         public int read(char[] cbuf,int offset,int length) throws IOException{}:读入字符数组中的某一部分
         回顾:
             String(char[] value, int offset, int count):分配一个新的 String,它包含取自字符数组参数一个子数组的字符
     代码演示:

  1 import java.io.FileInputStream;
2 import java.io.InputStreamReader;
3 import java.io.IOException;
4 import java.io.FileOutputStream;
5 import java.io.OutputStreamWriter;
6 public class StreamDemo02{
7 public static void main(String[] args) throws IOException{
8 //创建字节输出流
9 FileOutputStream out = new FileOutputStream("E:\\JAVAPractice\\IO\\stream.txt");
10 //创建转换流,以UTF-8的编码写入
11 OutputStreamWriter ow = new OutputStreamWriter(out,"UTF-8");
12 //准备写入的内容
13 String s = "我爱APPLE";
14 ow.write(s);
15 ow.close();
16
17 //创建字节输入流
18 FileInputStream in = new FileInputStream("E:\\JAVAPractice\\IO\\stream.txt");
19 //创建转换流,告诉程序应该是什么编码系统
20 InputStreamReader inr = new InputStreamReader(in, "UTF-8");
21 //定义i用来存储读取到的字节码值
22 int i = -1;
23 char[] c = new char[1024];
24 while((i = inr.read(c)) != -1){
25 String str = new String(c,0,i);
26 System.out.print(str);
27 }
28 inr.close();
29 }
30 }

六.打印流
     概述:打印流仅用于向文件中输出内容用,打印流在输出数据的时候,不会抛出IO异常;打印流一共有2个:
         printStream:属于字节流;早期版本;1.0
         printWriter:属于字符流;后来的版本,1.1;
         这两个流的功能几乎是一致;
     特点:
         所见即所得!
     区别:
         1:自动刷新的方式不同;
         2:主要操作的内容不同,printStream主要操作字节数据,printWriter主要操作字符数据;
    
     两套继承关系:
         java.lang.Object--java.io.OutputStream--java.io.FilterOutputStream--java.io.PrintStream
         java.lang.Object--java.io.Writer--java.io.PrintWriter

七.PrintStream (打印流)类(java.io)
     定义:public class PrintStream extends FilterOutputStream implements Appendable, Closeable
     构造方法:
         PrintStream(File file) 创建具有指定文件且不带自动行刷新的新打印流。
         PrintStream(File file, String csn) 创建具有指定文件名称和字符集且不带自动刷新的新打印流。
         -------------------------------------------------------------------------------------------
         PrintStream(OutputStream out) 创建新的打印流。
         PrintStream(OutputStream out, boolean autoFlush) 创建新的打印流,若为true,可自动刷新
         PrintStream(OutputStream out, boolean autoFlush, String encoding) :创建新的打印流。若为true,可自刷新,并指定字符集
         -------------------------------------------------------------------------------------------------------------------
         PrintStream(String fileName):创建具有指定文件名称且不带自动行刷新的新打印流
         PrintStream(String fileName, String csn):创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
         -----------------------------------------------------------------------------------------------------
     常用方法:
         public void print(Object obj):
         public void println():

八.PrintWriter (打印流)类(java.io)
     定义:public class PrintWriter extends Writer
     构造方法:
         PrintWriter(File file):使用指定文件创建不具有自动行刷新的新 PrintWriter。
         PrintWriter(File file, String csn):创建具有指定文件和字符集且不带自动刷行新的新 PrintWriter。
         -------------------------------------------------------------------------------------------
         PrintWriter(OutputStream out):根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
         PrintWriter(OutputStream out, boolean autoFlush):通过现有的 OutputStream 创建新的 PrintWriter。
         ----------------------------------------------------------------------------------------------
         PrintWriter(String fileName):创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
         PrintWriter(String fileName, String csn):创建具有指定文件名称和字符集且不带自动行刷新的新 PrintWriter。
         -------------------------------------------------------------------------------------------------------
         PrintWriter(Writer out):创建不带自动刷新的新 PrintWriter。
         PrintWriter(Writer out, boolean autoFlush):创建新 PrintWriter。
         ---------------------------------------------------------------------------------------------
     常用方法:同PrintStream

九.序列化和反序列化
     概述:
         序列化:将程序中的对象,保存到硬盘上,这个过程称为序列化;Java 中提供了一个类:ObjectOutputStream,用于序列化;
         反序列化:将硬盘上对象读取到程序中,并形成一个新的java对象,个过程称为反序列化;ObjectInputStream,用于反序列化;

十.ObjectOutputStream 类(java.io) 用于序列化
     概述:
         ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。
         注意事项:
             1:被序列化的对象必须实现Serializable接口;
             2:必须提供属性的getXxx与setXXx方法;
             3:必须有空参数的构造方法;
     定义:public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
     构造方法:
         ObjectOutputStream(OutputStream out)
     常用方法:
         public final void writeObject(Object obj) throws IOException{}:将指定的对象写入 ObjectOutputStream。
    

十一.ObjectInputStream 类(java.io) 用于反序列化
     概述:ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
     定义:public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
     构造方法:
         public ObjectInputStream(InputStream in) throws IOException
     常用方法:
         public final Object readObject()  throws IOException, ClassNotFoundException{}:从 ObjectInputStream 读取对象。调用一次,读一个对象,如果文件中没有下一个对象了,再调用该方法,会抛出异常;
建议:每个文件中只保存一个对象,只读一次;
     反序列化注意事项:
             1:如果一个对象已经序列化了,不能修改java类,否则会报错;解决:手动添加一个属性,定死一个版本号即可;
             2:如果属性不想序列化,可以使用关键字:transient或static;

十二.工具类的使用步骤:
     1:从网上下载对应的zip并解压;
     2:复制核心jar包到工程中;
     3:将jar添加到本地工程;(add to build path)
     4:直接使用核心类,调用方法;

十三.Commons-IO 工具类

工具的核心类:
     FileUtils:主要用于文件与文件夹的IO操作;  
     FileNameUtils:主要用于文件名的操作;

核心jar包:commons-io-2.4.jar

FileUtils 常用方法:(一般均为静态方法,类名直接调用即可)
     public static void copyDirectory(File srcDir, File destDir){}:复制文件夹,(不包含srcDir)(自动递归);
     public static void copyDirectoryToDirectory(File srcDir, File destDir){}:复制文件夹,(包含srcDir)(自动递归);
     public static void copyFile(File srcFile, File destFile){}:复制文件;
     public static String readFileToString(File file){}:将文件的内容读成一个字符串并返回;
     public static void writeStringToFile(File file, String data){}:将字符串写入到指定的文件中;

Properties-转换流-打印流-序列化和反序列化-Commons-IO工具类的更多相关文章

  1. IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO

    内容介绍 Properties集合 序列化流与反序列化流 打印流 commons-IO Properties类 Properties类介绍 Properties 类表示了一个持久的属性集.Proper ...

  2. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  3. Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)

    1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...

  4. java 转换流 打印流 数据流

    转换流 InputStreamReader 和 OutputStreamWriter处理流用于将字节流转化成字符流,字符流与字节流之间的桥梁InputStreamReader 的作用是把 InputS ...

  5. Java——IO流 对象的序列化和反序列化流ObjectOutputStream和ObjectInputStream

    对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  Ob ...

  6. 6.5(java学习笔记)其他流(字节数组流,数据流,对象流,打印流)

    一.字节数组流 之前使用输入输出流的操作的对象是文件,而这里字节数组流操作的对象是内存,内存可以看做是一个字节数组. 使用字节数组流读写就可以看做是从内存A到内存B的读写,对象时内存即字节数组. 1. ...

  7. JAVA笔记12__字节、字符缓冲流/打印流/对象流/

    /** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * ...

  8. 34 io流-- 打印流和对象流

    概述 io流分为字符流和字节流,具体分类相见下图 字符流:char 一些基本文本的数据传输 字节流:byte 图片.视频等用文本查看器查看不了的文件都是二进制文件,只能用字节流传输,使用字符流cp的看 ...

  9. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

随机推荐

  1. SimpliciTI简介

    SimpliciTI简介 SimpliciTI是TI开发的一份专门针对其CCxxxx系列无线通信芯片的网络协议.按照其官方说法SimpliciTI是一个基于连接的点对点通讯协议.它支持两种网络拓扑结构 ...

  2. Grunt:常见错误

    ylbtech-Grunt:常见错误 1.返回顶部 1. D:\lab6\DS.JZB.Web>grunt build Running "clean:dist" (clean ...

  3. JAVA操作cassandra数据库

    如果是maven项目,在pom.xml里加入依赖.不是的话下载相应的jar包放到lib目录下.这里驱动包的版本要和你cassandra的大版本一致.我这里cassandra的版本是最新的3.9,驱动是 ...

  4. Docker入门(一):简介

    这个<Docker入门>系列文档,是我根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家 ...

  5. 初步使用redis

    1.导入jar包 2.新建类: public class JedisAdapter { private static final Logger logger = LoggerFactory.getLo ...

  6. 利用msfvenom制作木马程序(你可以得到她的一切)

    实验环境: 虚拟机:kali  (攻击机)          192.168.1.2 虚拟机:windwos 2003 (靶机)   192.168.1.100 1. 制作木马 说明: -p payl ...

  7. HDU - 5887 2016青岛网络赛 Herbs Gathering(形似01背包的搜索)

    Herbs Gathering 10.76% 1000ms 32768K   Collecting one's own plants for use as herbal medicines is pe ...

  8. Vue+Electron下Vuex的Dispatch没有效果的解决方案

    这个问题是解决基于 vue 和 electron 的开发中使用 vuex 的 dispatch 无效的问题,即解决了 Please, don't use direct commit's, use di ...

  9. Solr 6.7学习笔记(06)-- spell check

    拼写检查也是搜索引擎必备的功能.Solr中提供了SpellCheckComponent 来实现此功能.我看过<Solr In Action>,是基于Solr4.X版本的,那时Suggest ...

  10. pgbouncer的安装和配置

    tar -zxvf libevent-2.0.21-stable.tar.gzcd libevent-2.0.21-stable/mkdir /home/pg10/libevent./configur ...