在實際開發中會經常碰到使用程式設計語言讀取文本檔案的内容,這内容可以是各種各樣的
一下本人寫出我自己做的一個讀取文本檔案的例子,
檔案中存儲的是我的個人網站 www.yzcopen.com 導航欄目
因為懶得使用資料庫了,就用text文本代替了做了一個簡單的資料庫
一下圖檔是我存儲的格式:

然後通過java代碼在程式加載的時候讀取文本内容存儲到緩存中
詳細代碼如下:
先建立一個緩存類:
package com.yzcopen.cache;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class initCache {
private static Map<String,Object> cacheMap = new ConcurrentHashMap<String,Object>();
//單執行個體構造方法
private initCache() {
}
/**
* 增加緩存
* @param key
* @param value
*/
public static void setValue(String key,Object value){
cacheMap.put(key, value);
}
//清除指定的緩存
public synchronized static void clearOnly(String key) {
cacheMap.remove(key);
}
//清除所有緩存
public synchronized static void clearAll() {
cacheMap.clear();
}
//修改緩存資料
public synchronized static void editeCache(String key,Object value) {
clearOnly(key);
cacheMap.put(key, value);
}
/**
* 以下都是查詢
* @param key
* @return
*/
@SuppressWarnings("unchecked")
public static Map<String,String> getMapValue(String key){
Object obj = cacheMap.get(key);
if(obj!=null){
return (Map<String, String>) obj;
}
return null;
}
public static Object getObjValue(String key){
Object obj = cacheMap.get(key);
return obj;
}
public static Integer getIntValue(String key){
Object obj = cacheMap.get(key);
if(obj!=null){
return (Integer)obj;
}
return 0;
}
public static String getStringValue(String key){
Object obj = cacheMap.get(key);
if(obj!=null){
return (String)obj;
}
return "";
}
}
然後讀取代碼函數:
public static void initCache(){
InputStream in = YzcPattern.class.getResourceAsStream("/resources/menu.txt"); //文本目錄 YzcPattern 可以換成任意類
InputStreamReader reader = null;
BufferedReader br = null;
try {
reader = new InputStreamReader(
in,"gbk");
br = new BufferedReader(reader); // 建立一個對象,它把檔案内容轉成計算機能讀懂的語言
String line = "";
line = br.readLine();
List<Map<String,Object>> menup = new ArrayList<Map<String,Object>>();
List<Map<String,Object>> menuc = new ArrayList<Map<String,Object>>();
while (line != null) {
String[] lines = line.split("\\|");
if(lines[0].equals("p")){
Map<String,Object> map = new HashMap<String,Object>();
map.put("bh", lines[1]);
map.put("name", lines[2]);
map.put("img", lines[3]);
map.put("listmap", new ArrayList<Map<String,Object>>());
menup.add(map);
}else if(lines[0].equals("c")){
Map<String,Object> map = new HashMap<String,Object>();
map.put("pbh", lines[1]);
map.put("bh", lines[2]);
map.put("name", lines[3]);
map.put("dis", lines[4]);
map.put("url", lines[5]);
map.put("img", lines[6]);
menuc.add(map);
}
line = br.readLine();
}
for(int i=0;i<menup.size();i++){
Map<String,Object> ob = menup.get(i);
String bm = ob.get("bh")+"";
for(int b = 0;b<menuc.size();b++){
Map<String,Object> obc = menuc.get(b);
String pbm = obc.get("pbh")+"";
if(bm.equals(pbm)){
((ArrayList)ob.get("listmap")).add(obc);
}
}
}
initCache.setValue("p", menup);
initCache.setValue("c", menuc);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
menu.txt存放目錄如下圖:
好了核心代碼都貼出來了,
我就是通過這麼一個文本來管理我的導航欄目的,當然最好還是用資料庫管理,text可以存儲一些簡單的資料還是挺友善的