前言:开发中经常会遇到加载一些配置文件信息,这些信息变化的概率很小,不需要实时的更新。这样的信息放在数据库里自然是不合适的,所以最好的办法是写在配置文件中,在程序第一次运行的时候加载到内存,以后用到的时候直接从内存读取就可以了。

这样做的好处:1、效率高,读取本地文件或内存信息和读取数据库中的信息,效率相比可想而知;2、不需要为这样的数据单独建立表;3,数据结构灵活,文件中的数据文件的结构组织很灵活。

下面是我的一种实现方式,仅供参考:

1.首先是配置文件类的设计。

 public static class AdminConfigManager
{
public static IList<AdminUser> AdminUsers { get; } = new List<AdminUser>(); #region 加载、保存相关
/// <summary>
/// 获取或设置配置文件路径。
/// </summary>
public static string ConfigFilePath { get; set; } /// <summary>
/// 加载配置。
/// </summary>
public static void LoadConfig()
{
XElement root = XElement.Load(ConfigFilePath);
AdminUsers.Clear();
foreach (XElement element in root.Elements("AdminUser"))
{
AdminUser adminUser = new AdminUser();
adminUser.Id = (string)element.Attribute("Id");
adminUser.Name = (string)element.Attribute("Name");
AdminUsers.Add(adminUser);
}
} /// <summary>
/// 保存配置。
/// </summary>
public static void SaveConfig()
{
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("AdminConfig",
from adminUser in AdminUsers
select new XElement("AdminUser",
new XAttribute("Id", adminUser.Id),
new XAttribute("Name", adminUser.Name)))); doc.Save(ConfigFilePath);
}
#endregion
} public sealed class AdminUser
{
public string Id { get; set; }
public string Name { get; set; }
}

2.使用实例

 static void Main(string[] args)
{
#region 1.0 加载配置
//这段代码一般放在程序的启动入库处,比如web项目的Global.asax.cs文件的Application_Start()方法里
AdminConfigManager.ConfigFilePath = @"../../AdminUserConfig.xml";//配置xml文件路径
AdminConfigManager.LoadConfig();//加载文件
#endregion IList<AdminUser> andminUsers = AdminConfigManager.AdminUsers; #region 2.0 新增
AdminUser addAdminUser = new AdminUser();
addAdminUser.Id = "RJ";
addAdminUser.Name = "任静";
AdminConfigManager.AdminUsers.Add(addAdminUser);
AdminConfigManager.SaveConfig();
#endregion #region 3.0 删除
//AdminUser deleteAdminUser = AdminConfigManager.AdminUsers.Where(u => u.Id == "RJ").First();
//AdminConfigManager.AdminUsers.Remove(deleteAdminUser);
//AdminConfigManager.SaveConfig();
#endregion Console.ReadKey();
}

 3.xml文件效果实例

系统配置文件的加载设置-以xml文件为例的更多相关文章

  1. 死磕Spring之IoC篇 - BeanDefinition 的加载阶段(XML 文件)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  2. tomcat 加载顺序 web.xml文件详解

    一. 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Se ...

  3. Cordova 项目 加载不出XML文件

    解决方法:copy bundle 将文件移除再添加

  4. 监听器如何获取Spring配置文件(加载生成Spring容器)

    Spring容器是生成Bean的工厂,我们在做项目的时候,会用到监听器去获取spring的配置文件,然后从中拿出我们需要的bean出来,比如做网站首页,假设商品的后台业务逻辑都做好了,我们需要创建一个 ...

  5. web.xml中如何设置配置文件的加载路径

    web应用程序通过Tomcat等容器启动时,会首先加载web.xml文件,通常我们工程中的各种配置文件,如日志.数据库.spring的文件等都在此时被加载,下面是两种常用的配置文件加载路径,即配置文件 ...

  6. Winform中设置DevExpress的RadioGroup的items从配置文件中加载

    场景 DevExpress的RadioGroup的items选项如果是不确定的话,需要其从配置文件中加载. 实现 在项目目录下新建Config文件夹,文件夹下新建xml配置文件. <?xml v ...

  7. 「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

    前言 有的时候,配置信息是我们无法在开发过程中就能确定的.比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等.这时候,就需要把配置文件放在外面,让用户自定义配置部 ...

  8. 从源码来理解slf4j的绑定,以及logback对配置文件的加载

    项目中的日志系统使用的是slf4j + logback.slf4j作为一个简单日志门面,为各种loging APIs(像java.util.logging, logback, log4j)提供一个简单 ...

  9. 从SpringBoot源码分析 配置文件的加载原理和优先级

    本文从SpringBoot源码分析 配置文件的加载原理和配置文件的优先级     跟入源码之前,先提一个问题:   SpringBoot 既可以加载指定目录下的配置文件获取配置项,也可以通过启动参数( ...

随机推荐

  1. 遍历后台的List,让前台的多选宽被选中

    后端代码: /** * 获取优惠卷分页信息 * * * @param ph * 包括查询条件以及分页查询条件 * */ @Override public DataGrid<AppCmsCoupo ...

  2. asp.net 文件 操作方法

    /// <summary> /// 移动文件 /// </summary> /// <param name="oldPath">源文件路径< ...

  3. JS原生第四篇 (帅哥)

      1.1  1. 循环 for(初始化; 退出条件; 增量)  {  } while(退出条件) {     } do {  语句 }  while(退出条件) 2. switch( )   多选1 ...

  4. JAVA设计模式《四》

    经过前几篇的介绍相信大家对JAVA的设计模式一定有所解了,本篇我们再一起学习一下适配器模式.代理模式和工厂模式. 适配器模式使用的场景非常多,例如现实生活中,我们的笔记本电脑的充电线大部分都是三向插头 ...

  5. MongoDB的学习--聚合

    最近要去的新项目使用mysql,趁着还没忘记,总结记录以下MongoDB的聚合. 聚合是泛指各种可以处理批量记录并返回计算结果的操作.MongoDB提供了丰富的聚合操作,用于对数据集执行计算操作.在  ...

  6. javascript学习总结(二):DOM常用方法。

    1 获取元素节点 a document.getElementById(id),它返回一个对象.是Document对象特有的函数,它还有这些方法: b element.getElementsByTagN ...

  7. 【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)

     概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的 ...

  8. [Logstash-input-redis] 使用详解

    redis插件的完整配置 input { redis { batch_count => 1 #返回的事件数量,此属性仅在list模式下起作用. data_type => "lis ...

  9. 大话ASP.NET开发(第一章 html5+css3+解耦问题的探讨)

    一.拉近我们的距离 我想,很多人会问,如今IE6还占据颇多份额的中国,html5.css3是否还很遥远?我会很直接告诉他们:其实就在你的眼前.我们来看两个图:                      ...

  10. SQL--Having

    Having--对分组信息进行过滤,因为分组之后的信息和原来的表信息没有关系了, Having可以用的之后,出现在Group子句中的列,还有聚合函数   SELECT s_Age ,COUNT(s_I ...