最近有一个这样的需求,将原本配置文件 .properties文件改到数据库当中,这样不用每次修改都重启服务器

java自带有处理 .properties文件的专有类 Properties,处理也很不错,但是没本法获取文件当中的注释,这就尴尬了,直接导入数据没有注释都不知道是个什么玩意,所以只能采用文件读取的方式获取。

具体实现如下:

 @BeforeClass
public static void getHiber(){
//1加载配置文件
Configuration config = new Configuration();
//默认加载src下hibernate.cfg.xml文件
config.configure("scy/hibernate.cfg.xml");
//2创建SessionFactory对象
SessionFactory factory = config.buildSessionFactory();
//SessionFactory sf=new Configuration().configure().buildSessionFactory();
session = factory.openSession();
}

代码采用hibernate+junit实现,设置好session之后就可以开始处理文件了

 @Test
public void getCommonFileLineTest(){
String path=SysParam.class.getResource("/").getPath().substring(1);
String currentLine = "";
Transaction tx = null ;
try{
File file = new File(path +"common.properties");
List<String> list = getCommonFileLine(file);
tx = session.beginTransaction();
for(int i=0;list!=null&&i<list.size();i++){
currentLine = list.get(i);
System.out.println(currentLine);
SysCommonSwitch switchs = new SysCommonSwitch();
if(currentLine.indexOf("#")>=0){
continue;
}else if(currentLine.indexOf("=")>0){
String[] arr = currentLine.split("=");
switchs.setCommonKey(arr[0]);
if(arr.length>=2 && StringUtils.isNotBlank(arr[1])){
switchs.setCommonValue(arr[1]);
}else{
switchs.setCommonValue("");
}
switchs.setDeletedFlag("0");
switchs.setSysId("CIS");
String proCurrentLine = list.get(i-1);
if(StringUtils.isNotBlank(proCurrentLine)){
String comment = proCurrentLine.replace("#", "");
switchs.setComment(comment);
}
session.save(switchs);
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
tx.commit();
session.close();
}
} private List<String> getCommonFileLine(File file){
ArrayList<String> arrayList = new ArrayList<String>();
BufferedReader bf = null;
try {
bf = new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));
String str;
// 按行读取字符串
while ((str = bf.readLine()) != null) {
arrayList.add(str);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("common行数"+arrayList.size());
return arrayList;
}

采用字符读取方式,按行读取,然后就是判断当前行是否是注释,需要注意的是,读取文件的时候一定要设置文件编码,不然读取出来的文字可能是乱码。

读取 .properties文件到数据库的更多相关文章

  1. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  2. Java的Properties类和读取.properties文件

    一..properties文件的作用 Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必 ...

  3. Java读取properties文件连接数据库

    先说为什么要有这种东西,或者我们为什么要用这种方式来写,先看经常用的方法,我们经常写的 package util; import java.sql.Connection; import java.sq ...

  4. Spring 如何读取properties文件内容

    http://hi.baidu.com/alizv/blog/item/d8cb2af4094662dbf3d38539.html 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置 ...

  5. 五种方式让你在java中读取properties文件内容不再是难题

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  6. 用eclipse做项目中常遇到的问题-如何创建并读取properties文件

    在用eclipse做项目开发的时候我们常常会将一些重要的内容写在配置文件里面, 特别是连接数据库的url,username,password等信息,我们常常会新建一个properties文件将所有信息 ...

  7. jsp读取properties文件

    jsp读取properties文件 jsp中读取properties文件,并把值设到js变量中: mpi.properties文件内容: MerchantID=00000820 CustomerEMa ...

  8. java读取.properties文件

    在web开发过程中,有些配置要保存到properties文件里,本章将给出一个工具类,用来方便读取properties文件. 案例: 1:config.properties文件 name=\u843D ...

  9. Java 读取Properties文件时应注意的路径问题

    1. 使用Class的getResourceAsStream()方法读取Properties文件(资源文件)的路径问题:  InputStream in = this.getClass().getRe ...

随机推荐

  1. 浅谈ROW_NUMBER() OVER()函数的使用

    语法格式:row_number() over(partition by 分组列 order by 排序列 desc)                   row_number() over 具有分组排 ...

  2. MyBatis Generator 移除字段前缀

    在table标签内添加 <columnRenamingRule searchString="wrc_" replaceString=""/> < ...

  3. vue 中echart折线自适应

    前端时间做一个vue的项目,echart是按需引入的如下: // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts' // 引入折线图 i ...

  4. 【每日一包0011】pad

    [github地址:https://github.com/ABCDdouyae...] pad 给字符串的左右加padding,也可以用于删减字符串两端 用法:pad(str, length, opt ...

  5. 闭包-IIFE

    1)嵌套函数,内部函数访问了外部函数的局部变量,通过返回内部函数,在函数外部调用内部函数,从而更新外部函数的局部变量的过程: 2)代码执行完成之后离开作用域依旧存在 3)有可能发生内存泄露,若对象的引 ...

  6. Gradle 配置国内镜像

    项目级配置 在项目中找到如下文件 打开,添加上阿里云镜像 maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}

  7. BZOJ 1818: [Cqoi2010]内部白点 (BIT + 扫描线)

    就是求多条线段的交点数,直接BIT+扫描线就行了. 注意不要算重最初存在的点. CODE #include<bits/stdc++.h> using namespace std; char ...

  8. HDU-1358-Period(KMP, 循环节)

    链接: https://vjudge.net/problem/HDU-1358#author=0 题意: For each prefix of a given string S with N char ...

  9. 使用choices参数的实际项目表设计

    # 实际项目表设计 from django.db import models # Create your models here. # rbac权限相关表格 class User(models.Mod ...

  10. vs2015显示代码行数

    打开visual studio 2015,在菜单中点击“工具” --> "选项" -->“文本编辑器” --> "所有语言" -->勾选 ...