📄 configstream.java
字号:
package com.vere.util;
import java.util.*;
import java.util.logging.*;
import java.io.*;
/**
* 负责对普通配置文件的操作
* @author Uniquick
* @version 1.0
* @see
*/
public class ConfigStream {
/**
* The Logger instance. All log messages from this class are routed through
* this member. The Logger namespace is <code></code>.
*/
private Logger log = Logger.getLogger("com.uniq.util");
public String fileName;
/**
* 缺省的构造函数,其中的文件名由配置文件定义
* @throws Exception
*/
public ConfigStream()throws Exception{
String configFileName=System.getProperty("sCRM.HOME") + "/config/sCRM.conf";
configFileName= configFileName.replace('\\','/');
openConfigFile(configFileName);
}
/**
* 构造函数
* @param fileName 文件名称
* @throws Exception
*/
public ConfigStream(String fileName)throws Exception{
openConfigFile(fileName);
}
/**
* 打开文件
* @param filename
* @throws Exception 没有正常打开
*/
private void openConfigFile (String fileName)throws Exception{
File cfgFile = new File(fileName);
if (cfgFile.exists()) {
this.fileName = fileName;
}else{
log.log(Level.SEVERE,"The config file "+fileName+"don't exists!");
throw new Exception("The config file " + fileName + "don't exists!");
}
}
/**
* 读取单个记录
* @param path 段落路径
* @param name 获取的数据项的名称
* @return 数据项的值,如果没有该数据项则为null
* @throws Exception
*/
public String getItem(String path,String name) throws Exception{
String result = null;
String line = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(this.fileName));
boolean pflag = false;
while ((line = br.readLine()) != null) {
line = line.trim();
int equalLocation = line.indexOf("=");
if (line.length() > 0 && line.substring(0,1).equals("[")) {
if(pflag)
pflag=false;
}
if (line.equalsIgnoreCase("[" +path+ "]")) {
pflag = true ;
continue;
}
if (pflag && line.length()>name.length() && name.equalsIgnoreCase(line.substring(0,equalLocation))) {
result = line.substring(equalLocation+1,line.length());
break;
}
}
}
catch (Exception e) {
log.log(Level.SEVERE,e.toString());
throw e;
}finally{
try{
br.close();
}catch(Exception ex){
log.log(Level.SEVERE,ex.toString());
}
}
return result;
}
/**
* 读取多个记录
* @param path 段落路径
* @param name 获取的数据项的名称前缀
* @return 数据项的值的数组 如果没有该数据项则为null
* @throws Exception
*/
public String[] getItems(String path,String name)throws Exception {
String[] result = new String[256];
int i = 0;
String line = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(this.fileName));
boolean pflag = false;
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.length() > 0 && line.substring(0,1).equals("[")) {
if(pflag)
pflag=false;
}
if (line.equalsIgnoreCase("[" +path+ "]")) {
pflag = true ;
continue;
}
if (pflag && line.length()>name.length() && name.equalsIgnoreCase(line.substring(0, name.length()))) {
result[i++] = line.substring(line.indexOf("=")+1, line.length());
continue;
}
}
}
catch (Exception ex) {
log.log(Level.SEVERE,ex.toString());
throw ex;
}finally{
try{
br.close();
}catch(Exception ex){
log.log(Level.SEVERE,ex.toString());
}
}
if(result == null || result.length==0)
return null;
//忽略result[]中剩余的为null的项
if ( i > 1) {
String[] tmp = new String[i];
for (int j = 0; j < i; j++) {
tmp[j] = result[j];
}
return tmp;
}
return null;
}
/**
* 读取多个记录,并且将其用xhgStr联结起来,返回一个String
* @param path 段落路径
* @param name 获取的数据项的名称
* @param connStr 连接符
* @return 数据项的值,如果没有该数据项则为null
* @throws Exception
*/
public String getItemsConnection(String path,String name,String connStr)throws Exception
{
String[] items=getItems(path,name);
StringBuffer result=new StringBuffer();
if(items == null)
return null;
for(int i=0;i<items.length;i++){
result.append(items[i]);
if(i!=items.length-1)
result.append(connStr);
}
return result.toString();
}
/**
* 增加一个记录
* @param path 段落路径
* @param name 名称
* @param value 值
* @throws Exception
*/
public void addItem(String path, String name, String value) throws Exception{
boolean pflag = false;
Vector line = new Vector();
String sline = "";
try {
//将数据读到vector中
BufferedReader br = null;
br = new BufferedReader(new FileReader(this.fileName));
while ((sline = br.readLine()) != null) {
line.addElement(new String (sline.getBytes("GB2312")));
}
br.close();
for (int i = 0 ; i < line.size(); i++) {
sline = (String)line.elementAt(i);
sline = sline.trim();
if (sline.length() > 0){
if (sline.startsWith("[")) {
if (pflag && sline.startsWith("[")) {
line.insertElementAt(name + "=" + value, i);
}
pflag = false;
}
}
if (sline.equalsIgnoreCase("[" + path + "]")) {
pflag = true ;
continue;
}
if (pflag) {
line.add(name + "=" + value);
break;
//if (pflag && name.equalsIgnoreCase(sline.substring(0, name.length()))) {
//line.setElementAt(name + "=" + value, i);
//break;
}
}
FileOutputStream ost = new FileOutputStream(this.fileName);
DataOutputStream ds = new DataOutputStream(ost);
for (int i = 0; i < line.size(); i++) {
ds.writeBytes(((String)(line.elementAt(i))).trim());
ds.writeByte('\r');
ds.writeByte('\n');
}
ds.flush();
ds.close();
}
catch (Exception ex) {
log.log(Level.SEVERE,ex.toString());
}
}
/**
* 删除一个记录
* @param path 段落路径
* @param name 名称
* @param value 值
* @throws Exception
*/
public void deleteItem(String path, String name, String value) throws Exception{
boolean pflag = false;
Vector line = new Vector();
String sline = "";
try {
//将数据读到vector中
BufferedReader br = null;
br = new BufferedReader(new FileReader(this.fileName));
while ((sline = br.readLine()) != null) {
line.addElement(new String (sline.getBytes("GB2312")));
}
br.close();
for (int i = 0 ; i < line.size(); i++) {
sline = (String)line.elementAt(i);
sline = sline.trim();
if (sline.length() > 0){
if (sline.startsWith("[")) {
if (pflag && sline.startsWith("[")) {
line.insertElementAt(name + "=" + value, i);
}
pflag = false;
}
}
if (sline.equalsIgnoreCase("[" + path + "]")) {
pflag = true ;
continue;
}
if (pflag && name.equalsIgnoreCase(sline.substring(0, name.length()))) {
//line.setElementAt(name + "=" + value, i);
//break;
}
}
FileOutputStream ost = new FileOutputStream(this.fileName);
DataOutputStream ds = new DataOutputStream(ost);
for (int i = 0; i < line.size(); i++) {
ds.writeBytes(((String)(line.elementAt(i))).trim());
ds.writeByte('\r');
ds.writeByte('\n');
}
ds.flush();
ds.close();
}
catch (Exception ex) {
log.log(Level.SEVERE,ex.toString());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -