Java中讀寫資源文件最重要的類是Propertiesjava
1) 資源文件要求以下:ide
2) 功能大體以下:編碼
1 package com.ifly.myhome.test; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 import java.io.UnsupportedEncodingException; 10 import java.util.Properties; 11 12 public class PropertiesMyTest 13 { 14 15 public static void main(String[] args) 16 { 17 18 String readfile = "e:" + File.separator + "readfile.properties"; 19 String writefile = "e:" + File.separator + "writefile.properties"; 20 String readxmlfile = "e:" + File.separator + "readxmlfile.xml"; 21 String writexmlfile = "e:" + File.separator + "writexmlfile.xml"; 22 String readtxtfile = "e:" + File.separator + "readtxtfile.txt"; 23 String writetxtfile = "e:" + File.separator + "writetxtfile.txt"; 24 25 readPropertiesFile(readfile); //讀取properties文件 26 writePropertiesFile(writefile); //寫properties文件 27 readPropertiesFileFromXML(readxmlfile); //讀取XML文件 28 writePropertiesFileToXML(writexmlfile); //寫XML文件 29 readPropertiesFile(readtxtfile); //讀取txt文件 30 writePropertiesFile(writetxtfile); //寫txt文件 31 } 32 33 //讀取資源文件,並處理中文亂碼 34 public static void readPropertiesFile(String filename) 35 { 36 Properties properties = new Properties(); 37 try 38 { 39 InputStream inputStream = new FileInputStream(filename); 40 properties.load(inputStream); 41 inputStream.close(); //關閉流 42 } 43 catch (IOException e) 44 { 45 e.printStackTrace(); 46 } 47 String username = properties.getProperty("username"); 48 String passsword = properties.getProperty("password"); 49 String chinese = properties.getProperty("chinese"); 50 try 51 { 52 chinese = new String(chinese.getBytes("ISO-8859-1"), "GBK"); // 處理中文亂碼 53 } 54 catch (UnsupportedEncodingException e) 55 { 56 e.printStackTrace(); 57 } 58 System.out.println(username); 59 System.out.println(passsword); 60 System.out.println(chinese); 61 } 62 63 //讀取XML文件,並處理中文亂碼 64 public static void readPropertiesFileFromXML(String filename) 65 { 66 Properties properties = new Properties(); 67 try 68 { 69 InputStream inputStream = new FileInputStream(filename); 70 properties.loadFromXML(inputStream); 71 inputStream.close(); 72 } 73 catch (IOException e) 74 { 75 e.printStackTrace(); 76 } 77 String username = properties.getProperty("username"); 78 String passsword = properties.getProperty("password"); 79 String chinese = properties.getProperty("chinese"); //XML中的中文不用處理亂碼,正常顯示 80 System.out.println(username); 81 System.out.println(passsword); 82 System.out.println(chinese); 83 } 84 85 //寫資源文件,含中文 86 public static void writePropertiesFile(String filename) 87 { 88 Properties properties = new Properties(); 89 try 90 { 91 OutputStream outputStream = new FileOutputStream(filename); 92 properties.setProperty("username", "myname"); 93 properties.setProperty("password", "mypassword"); 94 properties.setProperty("chinese", "中文"); 95 properties.store(outputStream, "author: shixing_11@sina.com"); 96 outputStream.close(); 97 } 98 catch (IOException e) 99 { 100 e.printStackTrace(); 101 } 102 } 103 104 //寫資源文件到XML文件,含中文 105 public static void writePropertiesFileToXML(String filename) 106 { 107 Properties properties = new Properties(); 108 try 109 { 110 OutputStream outputStream = new FileOutputStream(filename); 111 properties.setProperty("username", "myname"); 112 properties.setProperty("password", "mypassword"); 113 properties.setProperty("chinese", "中文"); 114 properties.storeToXML(outputStream, "author: shixing_11@sina.com"); 115 outputStream.close(); 116 } 117 catch (IOException e) 118 { 119 e.printStackTrace(); 120 } 121 } 122 123 }
username=khpassword=khchinese=謂語
#author: shixing_11@sina.com#Fri May 28 22:19:44 CST 2010password=khchinese=\u8C13\u8BEDusername=kh
3. readxmlfile.xmlspa
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties><entry key="password">mypassword</entry><entry key="chinese">中文</entry><entry key="username">myname</entry></properties>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties><entry key="password">kh</entry><entry key="chinese">中文</entry><entry key="username">kh</entry></properties>
1.緣由code
Properties調用load(InputStream)時,讀取文件時使用的默認編碼爲ISO-8859-1;當咱們講中文放入到properties文件中,經過getProperty(key)獲取值時,取到得數據是ISO-8859-1格式的,可是ISO-8859-1是不能識別中文的。xml
2.解決方法blog
經過getProperty()獲取的數據data既然是ISO-8859-1編碼的,就經過data.getByte(「iso-8859-1」)獲取獲取,使用new String(data.getByte(「iso-8859-1」),」UTF-8」)進行轉換。固然properties文件的編碼類型須要和new String(Byte[],charst)中的第二個參數的編碼類型相同繼承