本地文件数据源

xiaoxiao2021-02-28  80

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import lombok.extern.log4j.Log4j2; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; /** * 本地文件数据源 */ @Log4j2 public class FileDataResource { // 数据文件中涉及的表名 public static final String TABLES = "tab_order"; public static void main(String[] args){ try{ // 初始化文件 FileDataResource.initDataResource(); //往文件里写内容 Map<String,Object> data = new HashMap<String,Object>(); data.put("orderNo","2017070601024512564"); data.put("createTime","2017-12-06 12:11:09"); data.put("uploadTag","1"); //addDataToTbl("tab_order",data); //System.out.println(queryAllDataByTblNameAndParam("tab_order","orderNo","2017070601024512562")); //editDataValByTblOtherParam("tab_order","orderNo","2017070601024512563","uploadTag","8"); }catch (Exception e){ e.printStackTrace(); } } /** * 初始化数据文件 * @return */ public static boolean initDataResource(){ File file = getDataBaseFile(); PrintStream pStream = null; try { if(!file.exists()){ // 初始化创建文件 file.createNewFile(); } // 解析所有表 String[] tables = TABLES.split(","); // 读取数据库文件 String context = readFileCountInfo(file); if("".equals(context)){ JSONObject jObject = new JSONObject(); for(String tbl:tables){ JSONArray jArray = new JSONArray(); jObject.put(tbl,jArray); } // 写入文件 pStream = new PrintStream(new FileOutputStream(file)); pStream.print(jObject); } }catch (Exception e){ e.printStackTrace(); log.error(e); }finally { if(pStream!=null){ pStream.close(); } } return true; } /** * 修改表里某个数据的值 * @param tableName 表名 * @param keyFieldName 关键字段 * @param keyFieldVal 关键字段的值 * @param fieldName 要修改的字段名 * @param changeVal 修改后值 * @return */ public static boolean editDataValByTblOtherParam(String tableName,String keyFieldName,String keyFieldVal,String fieldName,String changeVal){ File file = getDataBaseFile(); // 将文件内容解析成JSON数据 JSONObject jsonObject = readFileParseToJosnObject(); JSONArray features = jsonObject.getJSONArray(tableName); for (int i = 0; i < features.size(); i++) { JSONObject info = features.getJSONObject(i); // 找到关键字段关键行 if(keyFieldVal.equals(info.getString(keyFieldName))){ // 修改需要修改的字段值 info.put(fieldName,changeVal); } } // 将内容重新写回文件里面 writeFileContentInfo(file,jsonObject.toString()); return true; } /** * 修改表里某个数据的值 * @param tableName 表名 * @param fieldName 字段名 * @param beforeVal 修改前值 * @param changeVal 修改后值 * @return */ public static boolean editDataValByTblParam(String tableName,String fieldName,String beforeVal,String changeVal){ File file = getDataBaseFile(); // 将文件内容解析成JSON数据 JSONObject jsonObject = readFileParseToJosnObject(); JSONArray features = jsonObject.getJSONArray(tableName); for (int i = 0; i < features.size(); i++) { JSONObject info = features.getJSONObject(i); String jsonVal = info.getString(fieldName); if(beforeVal.equals(jsonVal)){ info.put(fieldName,changeVal); } } // 将内容重新写回文件里面 writeFileContentInfo(file,jsonObject.toString()); return true; } /** * 读取文件并将内容转为josn对象 * @return */ public static JSONObject readFileParseToJosnObject(){ File file = getDataBaseFile(); // 读取数据库文件 String context = readFileCountInfo(file); // 将文件内容解析成JSON数据 return JSONObject.parseObject(context); } /** * 往指定表名写数据 * @param tableName 表名 * @param data 数据内容 * @return */ public static boolean addDataToTbl(String tableName,Map<String,Object> data){ log.info("----- addDataToTbl start -----"); File file = getDataBaseFile(); // 读取数据库文件 String context = readFileCountInfo(file); // 将文件内容解析成JSON数据 JSONObject json = readFileParseToJosnObject(); ArrayList<Map<String,Object>> dataList = null; if(json!=null){ // 查询指定json内容的数据 JSONArray jsonArray = json.getJSONArray(tableName); jsonArray.add(data); } // 将内容重新写回文件里面 writeFileContentInfo(file,json.toString()); log.info("----- addDataToTbl end -----"); return true; } /** * 查询对应表字段的符合数据内容 * @param tableName 表名 * @param fieldName 字段名 * @param param 数据内容 * @return */ public static List<Map<String,Object>> queryAllDataByTblNameAndParam(String tableName,String fieldName,String param){ List<Map<String,Object>> returnDateList = new ArrayList<Map<String,Object>>(); // 查询文件内指定table的所有数据 List<Map<String,Object>> tableDataList = queryAllDataByTblName(tableName); // 遍历table中的数据 for(Map<String,Object> data:tableDataList){ for(Map.Entry<String, Object> entry:data.entrySet()){ // 筛选指定的内容 if(fieldName.equals(entry.getKey().toString()) && param.equals(entry.getValue().toString())){ returnDateList.add(data); } } } return returnDateList; } /** * 根据表名查询所有数据 * @param tableName * @return */ public static List<Map<String,Object>> queryAllDataByTblName(String tableName){ File file = getDataBaseFile(); // 读取数据库文件 String context = readFileCountInfo(file); // 将数据文件内容解析成json对象 JSONObject json = JSONObject.parseObject(context); ArrayList<Map<String,Object>> dataList = null; if(json!=null){ Object jsonArray = json.get(tableName); // 将获取的表内所有数据转成Map类型 dataList = JSON.parseObject(jsonArray+"", new TypeReference<ArrayList<Map<String,Object>>>(){}); } return dataList; } /** * 将内容写到文件中 * @param file 读取的文件 * @param content 需要写入的内容 */ public static void writeFileContentInfo(File file,String content){ BufferedWriter bw = null; try { // 根据文件路径创建缓冲输出流 bw = new BufferedWriter(new FileWriter(file)); bw.write(content); bw.flush(); }catch (Exception e) { e.printStackTrace(); log.error(e); } finally { // 关闭流 if (bw != null) { try { bw.close(); }catch (IOException e) { bw = null; } } } } /** * 读取文件内容并返回文件内容String字符串 * @param file 数据文件 * @return */ public static String readFileCountInfo(File file){ BufferedReader reader = null; String dbContent = ""; try{ reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); int index = 1; String line = null; while ((line = reader.readLine()) != null) { dbContent += line; index++; } }catch(Exception e){ e.printStackTrace(); log.error(e); }finally{ if(reader!=null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return dbContent; } /** * 获取数据文件 * @return */ public static File getDataBaseFile(){ String rootPath = FileDataResource.getRootPath(); String filePath = rootPath + "/localDataBase.db"; File file = new File(filePath); return file; } /** * 获取工程路径 * @return */ public static String getRootPath() { String classPath = FileDataResource.class.getResource("/").getPath(); //String classPath = "M:\\logs"; String rootPath = ""; //windows下 if("\\".equals(File.separator)){ int index = classPath.indexOf("/WEB-INF/classes"); if(index==-1){ rootPath = classPath; }else{ rootPath = classPath.substring(1,classPath.indexOf("/WEB-INF/classes")); } rootPath = rootPath.replace("/", "\\"); } //linux下 if("/".equals(File.separator)){ int index = classPath.indexOf("/WEB-INF/classes"); if(index==-1){ rootPath = classPath; }else{ rootPath = classPath.substring(0,classPath.indexOf("/WEB-INF/classes")); } rootPath = rootPath.replace("\\", "/"); } System.out.println("----rootPath----"+rootPath); return rootPath; } }
转载请注明原文地址: https://www.6miu.com/read-58354.html

最新回复(0)