/*** 去除ini文件中的注释,以";"或"#"开头,顺便去除UTF-8等文件的BOM头

*@paramsource

*@return

*/

private staticString removeIniComments(String source){

String result=source;if(result.contains(";")){

result= result.substring(0, result.indexOf(";"));

}if(result.contains("#")){

result= result.substring(0, result.indexOf("#"));

}returnresult.trim();

}public static MapreadIni(String filename){

Map> listResult=new HashMap<>();

Map result=newHashMap();

String globalSection= "global";

File file= newFile(filename);

BufferedReader reader=null;try{

reader=new BufferedReader(new InputStreamReader(newFileInputStream(file)));

String str= null;

String currentSection= globalSection; //处理缺省的section

List currentProperties = new ArrayList<>();boolean lineContinued = false;

String tempStr= null;//一次读入一行(非空),直到读入null为文件结束//先全部放到listResult中

while ((str = reader.readLine()) != null) {

str= removeIniComments(str).trim(); //去掉尾部的注释、去掉首尾空格

if("".equals(str)||str==null){continue;

}//如果前一行包括了连接符'\'

if(lineContinued == true){

str= tempStr +str;

}//处理行连接符'\'

if(str.endsWith("\\")){

lineContinued= true;

tempStr= str.substring(0,str.length()-1);continue;

}else{

lineContinued= false;

}//是否一个新section开始了

if(str.startsWith("[") && str.endsWith("]")){

String newSection= str.substring(1, str.length()-1).trim();//如果新section不是现在的section,则把当前section存进listResult中

if(!currentSection.equals(newSection)){

listResult.put(currentSection, currentProperties);

currentSection=newSection;//新section是否重复的section//如果是,则使用原来的list来存放properties//如果不是,则new一个List来存放properties

currentProperties=listResult.get(currentSection);if(currentProperties==null){

currentProperties= new ArrayList<>();

}

}

}else{

currentProperties.add(str);

}

}//把最后一个section存进listResult中

listResult.put(currentSection, currentProperties);

reader.close();

}catch(IOException e) {

e.printStackTrace();

}finally{if (reader != null) {try{

reader.close();

}catch(IOException e1) {

}

}

}//整理拆开name=value对,并存放到MAP中://从listResult中,看各个list中的元素是否包含等号“=”,如果包含,则拆开并放到Map中//整理后,把结果放进result中

for(String key : listResult.keySet()){

List tempList =listResult.get(key);//空section不放到结果里面

if(tempList==null||tempList.size()==0){continue;

}if(tempList.get(0).contains("=")){ //name=value对,存放在MAP里面

Map properties = new HashMap<>();for(String s : tempList){int delimiterPos = s.indexOf("=");//处理等号前后的空格

properties.put(s.substring(0,delimiterPos).trim(), s.substring(delimiterPos+1, s.length()).trim());

}

result.put(key, properties);

}else{ //只有value,则获取原来的list

result.put(key, listResult.get(key));

}

}returnresult;

}

java ini_java读取ini格式的文件相关推荐

  1. 【自动化测试】Python 读取 .ini 格式文件

    大家应该接触过.ini格式的配置文件.配置文件就是把一些配置相关信息提取出去来进行单独管理,如果以后有变动只需改配置文件,无需修改代码.特别是后续做自动化的测试,需要拎出一部分配置信息,进行管理.比如 ...

  2. java读取ini_java 读取ini配置文件

    package com.papapa.test; import java.io.BufferedReader; import java.io.FileReader; import java.io.IO ...

  3. python ini文件 遍历_【自动化测试】Python 读取 .ini 格式文件

    大家应该接触过.ini格式的配置文件.配置文件就是把一些配置相关信息提取出去来进行单独管理,如果以后有变动只需改配置文件,无需修改代码.特别是后续做自动化的测试,需要拎出一部分配置信息,进行管理.比如 ...

  4. Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...

    原文地址:http://blog.csdn.net/jackpk/article/details/5702964/ Java读取UTF-8的txt文件第一行出现乱码"?"及解决 t ...

  5. python使用configparser读取ini格式的配置文件

    python使用configparser读取ini格式的配置文件 来自Python标准库的configparser模块定义了读取和写入Microsoft Windows操作系统使用的配置文件的功能.这 ...

  6. ajax读取文件数据,Ajax 实现读取 properties 格式资源文件数据

    Ajax 的核心是 JavaScript 对象 XmlHttpRequest.该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术.简而言之,XmlHttpRequ ...

  7. java代码将csv格式的文件导入数据库

    java代码将csv格式的文件导入数据库 最近接到了一个需求,将csv文件的内容通过java进行入库操作,在此记录一下整个完整的代码 主要逻辑 读取csv的每一个数据,对数据对应的对象赋值,将对象放入 ...

  8. C++读取ini格式配置文件

    一.背景 ini是早些年的程序启动配置文件格式,可以在该文件里配置一些默认参数,格式为: ;引号后面为注释 [group1] name = group1 IP = 192.168.1.100 port ...

  9. python读取.pkl格式的文件

    运行代码工具jupyter notebook 读取文件放在运行目录下 #读取.pkl格式的文件 #读取.pkl格式的文件 import pickle path='test_keys.pkl' f=op ...

最新文章

  1. 继承QTreeWidgetItem发生error: 'staticMetaObject' is not a member of 'QTreeWidgetItem' 错误
  2. ProgressDialog用法详解
  3. 中移动TD终端资助或只限五洋巨头
  4. 论文阅读|How Does Batch Normalization Help Optimization
  5. Mysql数据库有两种安装方法
  6. 现代软件工程 M1 博客要求
  7. 【译】Asp.Net 导出 Excel 数据的9种方案
  8. mysql 备份 索引_mysql-索引、导入、导出、备份、恢复
  9. 【转】Maven实战(八)---模块划分
  10. android viewpager fragment 生命周期,ViewPager中Fragment的生命周期
  11. python计算两字符串中的位置_从Python中的字符串中获取两个字符
  12. Netty实战九之单元测试
  13. vsftpd虚拟用户整理
  14. Linux----SSH远程连接服务
  15. SQL Server2008 附加数据库时出错
  16. es - elasticsearch search - missing value and unmapped fields
  17. 移动数据安全防护措施有哪些
  18. PHP WEB程序设计信息表,WEB程序设计(PHP)2020知到答案全套
  19. 联想Y430P换屏记
  20. OpenCV C++案例实战十八《抖音特效——“蓝线挑战”》

热门文章

  1. opencv训练样本分类器
  2. 关于mongodb的可视化工具:nosql manager for mongodb
  3. axure 图片切换图片的交互_Axure教程:首页图片轮播
  4. python编写交互界面查分app_Django项目中model的数据处理以及页面交互方法
  5. c语言子线程给主线程发信息,如何用C语言实现多线程
  6. execjs执行js出现window对象未定义时的解决_JS逆向 | 助力新手 , 两个JS逆向喂饭教程...
  7. java怎么求两组整数的或集_Java面试题(判断集合中是否有两个数的和等于某个给定整数)...
  8. java第七章jdbc课后简答题_java学习路线流程
  9. java光标_java怎么设置光标位置 java设置光标位置方法
  10. python判断语种_编写简单的Python程序来判断文本的语种