properties文件的写方法比较不好用,折中写了个通用类。
2.例子。
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties; /** * 读取Properties综合类 * * @author lijn 2014-02-25 */ public class PropertiesUtil { /** * 得到某一个类的路径 * * @param name * @return */ public static String getPath(Class name) { String strResult = null; if (System.getProperty("os.name").toLowerCase().indexOf("window") > -1) { strResult = name.getResource("/").toString().replace("file:/", "") .replace("%20", " "); } else { strResult = name.getResource("/").toString().replace("file:", "") .replace("%20", " "); } return strResult; } /** * 读取所有的property * * @param filename * properties文件路径 * @return 所有的property的集合(map形式) */ @SuppressWarnings("unchecked") public static Map<String, String> getPropties(String filename) { if (null == filename) { return null; } String filePath = getPath(PropertiesUtil.class) + filename; Properties props = new Properties(); InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(filePath)); props.load(in); Map<String, String> map = new HashMap<String, String>(); Enumeration en = props.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); String Property = props.getProperty(key); map.put(key, Property); } return map; // 关闭资源 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } /** * 获取某个property的值 * * @param filename * 文件名 * @param key * property的key * @return property的value */ public static String setProp(String filename, String key, String value) { if (null == filename || null == key) { return null; } String filePath = getPath(PropertiesUtil.class) + filename; Properties props = new Properties(); FileOutputStream out = null; InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(filePath)); props.load(in); out = new FileOutputStream(new File(filePath)); props.setProperty(key, value); props.store(out, "update"); // 关闭资源 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } /** * 获取某个property的值 * * @param filename * 文件名 * @param key * property的key * @return property的value */ public static String getProp(String filename, String key) { if (null == filename || null == key) { return null; } String filePath = getPath(PropertiesUtil.class) + filename; Properties props = new Properties(); InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(filePath)); props.load(in); return props.getProperty(key); // 关闭资源 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } /** * 需要将config.properies文件放到和本类同级目录下面 * * @param filename * @param key * @param value * @return */ public static String setJarProp(String filename, String key, String value) { if (null == filename || null == key) { return null; } String filePath = getPath(PropertiesUtil.class) + filename; Properties props = new Properties(); FileOutputStream out = null; InputStream in = null; try { in = PropertiesUtil.class.getResourceAsStream("config.properties"); // System.out.println(PropertiesUtil.class.getClassLoader().getResource("config.properties")); BufferedInputStream b2 = new BufferedInputStream(in); props.load(b2); out = new FileOutputStream(filePath); props.setProperty(key, value); props.store(out, "update"); // 关闭资源 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } /** * 读写jar外的properties文件 * * @param filename * @param key * @param value */ public static void setExtralProperty(String filename, String key, String value) { if (null == filename || null == key) { return; } String outPathString = System.getProperty("java.class.path"); outPathString = outPathString.substring(0, outPathString .lastIndexOf("\\") + 1); String filePath = outPathString + filename; Properties props = new Properties(); FileOutputStream out = null; BufferedInputStream b2 = null; try { b2 = new BufferedInputStream(new FileInputStream(filePath)); props.load(b2); out = new FileOutputStream(new File(filePath)); props.setProperty(key, value); props.store(out, "update"); // 关闭资源 } catch (FileNotFoundException e) { setProp(filename,key,value); } catch (IOException e) { e.printStackTrace(); } finally { try { if(null!=out){ out.close(); } if(null!=b2){ b2.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 以行的形式写ja内的文件 * * @param filename * @param key * @param value */ public static void writeLineInerFile(String filename, String content) { if (null == filename || null == content) { return; } String filePath = getPath(PropertiesUtil.class) + filename; FileOutputStream out = null; BufferedInputStream b2 = null; byte[] cont=new byte[4]; String contentResult=""; try { //先读取源文件的内容,再追加内容 b2 = new BufferedInputStream(new FileInputStream(filePath)); int res=b2.read(cont); while(res!=-1){ contentResult=contentResult+new String(cont); res=b2.read(cont); } //追加 contentResult+=content; out = new FileOutputStream(new File(filePath)); out.write(contentResult.getBytes()); // 关闭资源 } catch (FileNotFoundException e) { } catch (IOException e) { e.printStackTrace(); } finally { try { if(null!=out){ out.close(); } if(null!=b2){ b2.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 以行的形式写jar外的文件 * * @param filename * @param key * @param value */ public static void writeLineExtralFile(String filename, String content) { if (null == filename || null == content) { return; } String outPathString = System.getProperty("java.class.path"); outPathString = outPathString.substring(0, outPathString .lastIndexOf("\\") + 1); String filePath = outPathString + filename; FileOutputStream out = null; BufferedInputStream b2 = null; byte[] cont=new byte[1024]; String contentResult=""; try { //先读取源文件的内容,再追加内容 b2 = new BufferedInputStream(new FileInputStream(filePath)); int res=b2.read(cont); while(res!=-1){ contentResult=contentResult+new String(cont); res=b2.read(cont); } //追加 contentResult+=content; out = new FileOutputStream(filePath); out.write(contentResult.getBytes()); // 关闭资源 } catch (FileNotFoundException e) { writeLineInerFile(filename,content); } catch (IOException e) { e.printStackTrace(); } finally { try { if(null!=out){ out.close(); } if(null!=b2){ b2.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 读jar外的properties文件的属性 * * @param filename * @param key * @param value */ public static String getExtralProperty(String filename, String key) { if (null == filename || null == key) { return null; } String outPathString = System.getProperty("java.class.path"); outPathString = outPathString.substring(0, outPathString .lastIndexOf("\\") + 1); String filePath = outPathString + filename; Properties props = new Properties(); BufferedInputStream b2=null; try { b2 = new BufferedInputStream(new FileInputStream(filePath)); props.load(b2); return props.getProperty(key); // 关闭资源 } catch (FileNotFoundException e) { return getProp(filename,key); } catch (IOException e) { e.printStackTrace(); } finally { try { if(null!=b2){ b2.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } public static void main(String[] args) throws IOException { writeLineExtralFile("error.txt","fiowe"); } }
3.后记。
如果是要读jar里面的src直属的properties,直接用ResourseBundle就可以了。
ResourceBundle resourceBundle = ResourceBundle.getBundle(filename .replace(".properties", "")); String temp = resourceBundle.getString(key);