Java——Properties集合,Object序列化流與反序列化流,打印流,commons-IO文件工具類
阿新 • • 發佈:2018-02-11
都是 oos times odi store buffer src object 所有
一、properties集合
集合對象Properties類,繼承Hashtable,實現Map接口,可以和IO對象結合使用,實現數據的持久存儲。
特點:
- Hashtable的子類,map集合中的方法都可以用。
- 該集合沒有泛型。鍵值都是字符串。
- 它是一個可以持久化的屬性集。鍵值可以存儲到集合中,也可以存儲到持久化的設備(硬盤、U盤、光盤)上。鍵值的來源也可以是持久化的設備。
- 有和流技術相結合的方法。
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文件工具類