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;
}
}
本地文件数据源
最新推荐文章于 2023-12-08 12:21:54 发布