本地文件数据源

来源:互联网 发布:淘宝客推爆款方法 编辑:程序博客网 时间: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;    }}

原创粉丝点击