1,首先,Java中的getResourceAsStream有如下幾種:
1. Class.getResourceAsStream(String path) : path 不以’/'開頭時默認是今後類所在的包下取資源,以’/'開頭則是從ClassPath根下獲取。其只是經過path構造一個絕對路徑,最終仍是由ClassLoader獲取資源。
2. Class.getClassLoader.getResourceAsStream(String path) :默認則是從ClassPath根下獲取,path不能以’/'開頭,最終是由ClassLoader獲取資源。
3. ServletContext. getResourceAsStream(String path):默認從WebAPP根目錄下取資源,Tomcat下path是否以’/'開頭無所謂,固然這和具體的容器實現有關。
4. Jsp下的application內置對象就是上面的ServletContext的一種實現。
其次,getResourceAsStream 用法大體有如下幾種:
第一: 要加載的文件和.class文件在同一目錄下,例如:com.x.y 下有類me.class ,同時有資源文件myfile.xml
那麼,應該有以下代碼:
me.class.getResourceAsStream("myfile.xml");
第二:在me.class目錄的子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.y.file 目錄下有資源文件myfile.xml
那麼,應該有以下代碼:
me.class.getResourceAsStream("file/myfile.xml");
第三:不在me.class目錄下,也不在子目錄下,例如:com.x.y 下有類me.class ,同時在 com.x.file 目錄下有資源文件myfile.xml
那麼,應該有以下代碼:
me.class.getResourceAsStream("/com/x/file/myfile.xml");
總結一下,可能只是兩種寫法
第一:前面有 「 / 」
「 / 」表明了工程的根目錄,例如工程名叫作myproject,「 / 」表明了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");
第二:前面沒有 「 / 」
表明當前類的目錄
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");
最後,本身的理解:
getResourceAsStream讀取的文件路徑只侷限與工程的源文件夾中,包括在工程src根目錄下,以及類包裏面任何位置,可是若是配置文件路徑是在除了源文件夾以外的其餘文件夾中時,該方法是用不了的。
配置文件讀取:
private static Properties properties = new Properties();
properties.load(getClass().getResourceAsStream(conifgName));
String value = properties.getString(key);
1,首先,Java中的getResourceAsStream有如下幾種:
/** * 修改某個屬性 * @param key 修改的屬性名 * @param value 修改的屬性值 * @return */ public static String setString(String key, String value) { OutputStream fos = null; try { fos = new FileOutputStream(Object.class.getResource(conifgName).getFile()); if (value == null || "".equals(value)) { return null; } if (null == instance) { getInstance(); } properties.setProperty(key, value); // 保存,並加入註釋 properties.store(fos, "Update '" + key + "'111111 value"); return properties.getProperty(key); } catch (Exception e) { log.error("set properties error:(key->" + key + ",value->" + value + ")", e); e.printStackTrace(); return null; } finally { try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }