1. 程式人生 > >Java——Properties集合,Object序列化流與反序列化流,打印流,commons-IO文件工具類

Java——Properties集合,Object序列化流與反序列化流,打印流,commons-IO文件工具類

都是 oos times odi store buffer src object 所有

一、properties集合

集合對象Properties類,繼承Hashtable,實現Map接口,可以和IO對象結合使用,實現數據的持久存儲。

特點:

  1. Hashtable的子類,map集合中的方法都可以用。
  2. 該集合沒有泛型。鍵值都是字符串。
  3. 它是一個可以持久化的屬性集。鍵值可以存儲到集合中,也可以存儲到持久化的設備(硬盤、U盤、光盤)上。鍵值的來源也可以是持久化的設備。
  4. 有和流技術相結合的方法。

技術分享圖片

1、基本使用

private static void func() {
    //沒有泛型
    Properties pro = new Properties();
    //使用setProperty設置鍵值對,等同Map接口的set
    pro.setProperty("a", "1");
    pro.setProperty("b", "2");
    pro.setProperty("c", "3");
    System.out.println(pro);    //{a=1, b=2, c=3}

    //由鍵獲取值,等同Map接口的get
    String v = pro.getProperty("c");
    System.out.println(v);

    //方法stringPropertyNames,將集合中的鍵存儲到Set集合,類似於Map接口的方法keySet
    Set<String> set = pro.stringPropertyNames();
    for(String k : set){
        System.out.println(k+"..."+pro.getProperty(k));
    }
}

2、讀取文件中的鍵值對保存到集合

/*
 * Properties集合特有方法 load
 * load(InputStream in)
 * load(Reader r)
 * 傳遞任意的字節或者字符輸入流
 * 流對象讀取文件中的鍵值對,保存到集合
 */
private static void func() throws IOException {
    //實例化properties集合
    Properties pro = new Properties();
    //實例化字符/字節輸入流
    FileReader fr = new FileReader("/home/x54256/桌面/pro.properties");
    //讀取數據,保存到Propertie集合中
    pro.load(fr);
    //關閉文件
    fr.close();
    //打印
    System.out.println(pro);    // {name=x5456, age=23, [email protected]}
}

文件格式

name=x5456
[email protected]

3、存到文件中

/*
 * Properties集合的特有方法store
 * store(OutputStream out)
 * store(Writer w)
 * 接收所有的字節或者字符的輸出流(需要flush),將集合中的鍵值對,寫回文件中保存
 */
private static void func() throws IOException {
    Properties pro = new Properties();
    pro.setProperty("name","x5456");
    pro.setProperty("age","12");
    pro.setProperty("email","[email protected]");

    //鍵值對格式存回文件,使用集合的方法store傳遞字符輸出流
    FileOutputStream fos = new FileOutputStream("/home/x54256/桌面/1.txt");
    pro.store(fos,"save msg");
    fos.close();
}

二、序列化流與反序列化流

用於從流中讀取對象的操作流ObjectInputStream 稱為反序列化流,用於向流中寫入對象的操作流ObjectOutputStream 稱為序列化流

  • 特點:用於操作對象。可以將對象寫入到文件中,也可以從文件中讀取對象。

Person類

import java.io.Serializable;

public class Person implements Serializable {   //需要實現接口Serializable
    private String name;
    private /*transient關鍵字:阻止成員變量序列化*/ int age;
    //類,自定義了序列號,編譯器不會計算序列號(就算保存到文件後修改了java代碼,也沒關系)
    private static final long serialVersionUID = 1478652478456L;

    //tostring,init,get,set方法...
}

1、將對象寫入文件中

/*
 * ObjectOutputStream
 * 構造方法: ObjectOutputStream(OutputSteam out)
 * 傳遞任意的字節輸出流
 * void writeObject(Object obj)寫出對象的方法
 */
private static void func() throws IOException {
    FileOutputStream fos = new FileOutputStream("/home/x54256/桌面/2.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    Person p = new Person("x5456",23);
    oos.writeObject(p);
    oos.close();
}

2、從文件中讀取對象

/*
 * ObjectInputStream
 * 構造方法:ObjectInputStream(InputStream in)
 * 傳遞任意的字節輸入流,輸入流封裝文件,必須是序列化的文件
 * Object readObject()  讀取對象
 */
private static void func() throws IOException, ClassNotFoundException {
    FileInputStream fis = new FileInputStream("/home/x54256/桌面/2.txt");
    //創建反序列化流,構造方法中,傳遞字節輸入流
    ObjectInputStream ois = new ObjectInputStream(fis);
    //調用反序列化流的方法 readObject()讀取對象
    Object obj = ois.readObject();
    System.out.println(obj);
    ois.close();
}

三、打印流

打印流添加輸出數據的功能,使它們能夠方便地打印各種數據值表示形式。

打印流根據流的分類:

  • 字節打印流 PrintStream:構造方法,接收File類型,接收字符串文件名,接收字節輸出流OutputStream

  • 字符打印流 PrintWriter:構造方法,接收File類型,接收字符串文件名,接收字節輸出流OutputStream, 接收字符輸出流Writer

方法:

void print(String str): 輸出任意類型的數據,

void println(String str): 輸出任意類型的數據,自動寫入換行操作

特點:

  • 1. 此流不負責數據源,只負責數據目的
  • 2. 為其他輸出流,添加功能
  • 3. 永遠不會拋出IOException,但可能拋出別的異常

1、寫入文件

/*
 * 打印流,向File對象的數據目的寫入數據
 * 方法print println  原樣輸出
 * write方法走碼表
 */
public static void function() throws FileNotFoundException{
	//文件
	File file = new File("c:\\1.txt");
	PrintWriter pw = new PrintWriter(file);
	//字符串		
	PrintWriter pw = new PrintWriter("c:\\2.txt");		
	pw.println(100);	//100
	pw.write(100);		//d
	//字節輸出流
	FileOutputStream fos = new FileOutputStream("c:\\3.txt");
	PrintWriter pw = new PrintWriter(fos);
	//字符輸出流
	FileWriter fw = new FileWriter("c:\\4.txt");
	PrintWriter pw = new PrintWriter(fw);

	pw.close();
}

2、自動刷新

/*
 * 打印流實現文本復制
 *   讀取數據源  BufferedReader+File 讀取文本行
 *   寫入數據目的 PrintWriter+println 自動刷新
 */
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();
}

四、commons-IO文件工具類

1、獲取文件擴展名

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

2、獲取文件名

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

3、判斷文件後綴

/*
 * 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);
}

4、讀取文本

/*
 * 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);
 }

5、寫入文本

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

6、復制文件

/*
 * 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"));
}

7、復制文件夾

/*
 * FileUtils工具類方法
 * static void copyDirectoryToDirectory(File src,File desc)
 * 復制文件夾
 */
public static void function_3() throws IOException{
	FileUtils.copyDirectoryToDirectory(new File("d:\\demo"), new File("c:\\"));
}

Java——Properties集合,Object序列化流與反序列化流,打印流,commons-IO文件工具類