本地文件数据源
来源:互联网 发布:淘宝客推爆款方法 编辑:程序博客网 时间:2024/05/20 07:51
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.*;/** * 本地文件数据源 */@Log4j2public 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; }}
阅读全文
0 0
- 本地文件数据源
- 4.文件数据源-本地文件
- HIVE系列(5)HIVE 数据源文件 本地文件、hdfs文件加载,hql 统计电商tb 每年订单最畅销商品
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- Linux 采用虚拟用户建立 FTP Server
- 1.2Android 学习+进度之二
- 单点,网云盘
- 5个最顶级jQuery图表类库插件-Charting plugin
- springboot 开发入门
- 本地文件数据源
- nginx+iis实现负载均衡
- Unity3D中脚本的执行顺序和编译顺序
- 跨平台开发时代的 (再次) 到来?
- 服务端与客户端交互(二)
- mysql行转列、列转行
- 使用 NW.js 跨平台开发
- 使用AV Pro Video 在unity里播放视频最简单操作
- 关于supervisor安装及配置