本地文件数据源

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;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值