java的一些工具包
http://www.oschina.net/project/tag/143/utils
在一些项目中经常用到保存一个配置文件,但是配置文件一般都用ini格式进行保存
那么对于该文件的类型怎么创建又怎么进行修改的呢?
下面是一种很方面的方法:
package cn.com.shine.ini;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Tools {
static Map<String, Map<String, Object>> iniFile = new HashMap<String, Map<String, Object>>();
public void write(String name) throws IOException {
StringBuilder sb = new StringBuilder("");
for (String section : iniFile.keySet()) {
sb.append("[").append(section).append("]").append("\n");
Map<String, Object> map = iniFile.get(section);
Set<String> keySet = map.keySet();
for (String key : keySet) {
sb.append(key).append("=").append(map.get(key)).append("\n");
}
}
File file = new File(name);
if (!file.exists()) {
file.createNewFile();
}
try {
OutputStream os = new FileOutputStream(file);
os.write(sb.toString().getBytes());
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void setValue(String section, String key, Object value) {
Map<String, Object> sectionMap = iniFile.get(section);
if (sectionMap == null) {
sectionMap = new HashMap<String, Object>();
iniFile.put(section, sectionMap);
}
sectionMap.put(key, value);
}
public Object getValue(String section, String key) {
Object obj = null;
Map<String, Object> item = iniFile.get(section);
if (item != null) {
obj = item.get(key);
}
return obj;
}
}
package cn.com.shine.ini;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class IniSrc {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Tools tools=new Tools();
/*tools.setValue("ip", "ip_address", "183.126.125.152");
tools.setValue("ip1", "ip_address1", "184.126.125.152");
tools.setValue("ip2", "ip_address2", "185.126.125.152");
tools.setValue("ip3", "ip_address3", "186.126.125.152");
tools.setValue("ip4", "ip_address4", "187.126.125.152");*/
tools.setValue("ip", "ip_address", "183");
try {
tools.write("E:\\NET.ini");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
另外一种是调用第三方jar包
http://javaini.sourceforge.net/
此类库可以在此下载:
不过不支持中文,若要需要支持中文,可以对源代码进行修改,如把编码格式修改就可以:
修改应该在这个地方:
/*
* Java INI Package
* Copyright (C) 2008 David Lewis
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public Licence as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public Licence for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.dtools.ini;
import java.io.*;
/**
* The IniFileWriter class is a simple class which allows the user to write an
* IniFile object to the hard disk. One of the class' greatest advantage is that
* it removes the complexity of writing files from the user.
*
* @author David Lewis
* @version 0.3.0
* @since 0.1.14
*/
public class IniFileWriter {
/**
* The text encoding for writing String to files.
* @since 0.1.16
*/
//把此编码格式变为UTF-8即可,就可以支持中文了。
public static final String ENCODING = "ASCII";
/**
* The <code>IniFile<code> to write to the hard disk.
*/
private IniFile ini;
/**
* The file where to write the <code>IniFile</code> to
*/
private File file;
/**
* Boolean value that, if true, adds a separate line before and after each
* section.
*
* @since 0.3.0
*/
private boolean sectionLineSeparator;
/**
* Boolean value that, if true, adds a space character before and after the
* equals character (<code>'='</code>) in an item.
*
* @since 0.3.0
*/
private boolean includeSpaces;
/**
* Boolean value that, if true, adds a separate line between each item.
*
* @since 0.3.0
*/
private boolean itemLineSeparator;
/**
* Creates a new IniFileWriter thread instance.
*
* @param ini The IniFile to write.
* @param file The File where to write the IniFile to.
*
* @since 0.1.14
*/
public IniFileWriter( IniFile ini, File file ) {
if( ini == null ) {
throw new IllegalArgumentException( "Cannot write a null IniFile" );
}
if( file == null ) {
throw new IllegalArgumentException(
"Cannot write an IniFile to a null file" );
}
this.ini = ini;
this.file = file;
// set parameters of IniFileWriter object
setIncludeSpaces( false );
setItemLineSeparator( false );
setSectionLineSeparator( false );
}
/**
* This method converts an INI file to a String object.
*
* @param ini The IniFile to convert.
* @return A String that represents the IniFile.
*
* @since 0.1.14
*/
private String iniToString( IniFile ini ) {
// declare and initialise
StringBuilder builder = new StringBuilder();
//**********************************************************************
// Loop through all the sections and append section to ini file
//**********************************************************************
int size = ini.getNumberOfSections();
for( int i=0; i<size; i++ ) {
IniSection section = ini.getSection(i);
builder.append( sectionToString(section) );
builder.append( IniUtilities.NEW_LINE );
}
// return text
return builder.toString();
}
/**
* <p>This method takes a pre or post comment from either an item or
* section, and converts the comment to the correct format for a text file.
* This is mainly for comments that are on multiple lines.</p>
*
* @param comment The comment to format.
* @param prefixNewLine If true, the new-line character is added before the
* comment (as in the case for post-comments). Otherwise, the
* new-line character is added after the comment (as in the case of
* pre-comments).
* @return The comment in the correct format for a test file.
* @since 0.3.0
*/
private String formatComment( String comment, boolean prefixNewLine ) {
StringBuilder sb = new StringBuilder();
// if the comment is multiple lines, then split it and add each line
// separately
if( comment.contains( "\n" ) ) {
String[] comments = comment.split( "\n" );
for( String aComment : comments ) {
if( prefixNewLine )
sb.append( IniUtilities.NEW_LINE );
sb.append( Commentable.COMMENT_SYMBOL + aComment );
if( !prefixNewLine )
sb.append( IniUtilities.NEW_LINE );
}
}
else {
if( prefixNewLine )
sb.append( IniUtilities.NEW_LINE );
sb.append( Commentable.COMMENT_SYMBOL + comment );
if( !prefixNewLine )
sb.append( IniUtilities.NEW_LINE );
}
return sb.toString();
}
/**
* This method converts an IniItem to a String object.
*
* @param item The IniItem to convert.
* @return A String that best represents the IniItem
*
* @since 0.1.14
*/
private String itemToString(IniItem item) {
//**********************************************************************
// Declarations and initialisations
//**********************************************************************
String comment;
StringBuilder builder = new StringBuilder();
//**********************************************************************
// if there is a pre-comment then add it
//**********************************************************************
comment = item.getPreComment();
if( !comment.equals("") ) {
builder.append( formatComment(comment,false) );
}
//**********************************************************************
// add item
//**********************************************************************
if( includeSpaces ) {
builder.append( item.getName() + " = " );
}
else {
builder.append( item.getName() + "=" );
}
if( item.getValue() != null ) {
builder.append( item.getValue() );
}
// if there is an end line comment, then add it
if( !item.getEndLineComment().equals("") ) {
builder.append( " " +
Commentable.COMMENT_SYMBOL + item.getEndLineComment() );
}
//**********************************************************************
// if there is a post comment, then add it
//**********************************************************************
comment = item.getPostComment();
if( !comment.equals("") ) {
builder.append( formatComment(comment,true) );
builder.append( IniUtilities.NEW_LINE );
}
else if( itemLineSeparator ) {
builder.append( IniUtilities.NEW_LINE );
}
//**********************************************************************
// return text
//**********************************************************************
return builder.toString();
}
/**
* This method converts an IniSection object to a String object.
*
* @param section The IniSection object to convert.
* @return A String object that best represents the IniSection.
*
* @since 0.1.14
*/
private String sectionToString( IniSection section ) {
//**********************************************************************
// Declarations and initialisations
//**********************************************************************
String comment;
StringBuilder builder = new StringBuilder();
//**********************************************************************
// check to see if sectionLineSeparator is set to true
//**********************************************************************
if( sectionLineSeparator ) {
builder.append( IniUtilities.NEW_LINE );
}
//**********************************************************************
// add pre-comment if one exists
//**********************************************************************
comment = section.getPreComment();
if( !comment.equals("") ) {
builder.append( formatComment(comment,false) );
}
//**********************************************************************
// add section heading
//**********************************************************************
builder.append( "[" + section.getName() + "]" );
//**********************************************************************
// add end line comment
//**********************************************************************
comment = section.getEndLineComment();
if( !comment.equals("") ) {
builder.append( " " + Commentable.COMMENT_SYMBOL + comment );
}
//**********************************************************************
// add post comment
//**********************************************************************
comment = section.getPostComment();
if( !comment.equals("") ) {
builder.append( formatComment(comment,true) );
builder.append( IniUtilities.NEW_LINE );
}
else if( sectionLineSeparator ) {
builder.append( IniUtilities.NEW_LINE );
}
//**********************************************************************
// Loop through all the items and append section to ini file
//**********************************************************************
int size = section.getNumberOfItems();
for( int i=0; i<size; i++ ) {
IniItem item = section.getItem(i);
builder.append( IniUtilities.NEW_LINE );
builder.append( itemToString(item) );
}
//**********************************************************************
// return text
//**********************************************************************
return builder.toString();
}
/**
* This method sets whether a space character should be placed before and
* after the equals character in an item.
*
* @param value If true, a space character is placed before and after the
* equals character.
*
* @since 0.3.0
*/
public void setIncludeSpaces( boolean value ) {
includeSpaces = value;
}
/**
* This method sets whether an empty line should be included before and
* after an item has occurred in the file.
*
* @param value If true, an empty line will be included before and after an
* item.
* @since 0.3.0
*/
public void setItemLineSeparator( boolean value ) {
itemLineSeparator = value;
}
/**
* This method sets whether an empty line should be included before and
* after a section has occurred in the file.
*
* @param value If true, an empty line will be included before and after a
* section.
* @since 0.3.0
*/
public void setSectionLineSeparator( boolean value ) {
sectionLineSeparator = value;
}
/**
* <p>This method actually writes the <code>IniFile</code> to the File
* object (both of which are given in the constructor).</p>
*
* @throws IOException If an I\O exception occurs.
* @since 0.1.14
*/
public void write() throws IOException {
BufferedWriter bufferWriter = null;
// do not use FileWriter as you cannot manually set the character
// encoding
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos, ENCODING );
bufferWriter = new BufferedWriter( osw );
bufferWriter.write( iniToString(ini) );
bufferWriter.close();
}
}
例子:
//生成ini文件,并进行写入:
package cn.com.shine.ini;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import org.dtools.ini.BasicIniFile;
import org.dtools.ini.BasicIniSection;
import org.dtools.ini.IniFile;
import org.dtools.ini.IniFileReader;
import org.dtools.ini.IniFileWriter;
import org.dtools.ini.IniItem;
import org.dtools.ini.IniSection;
public class JavIni {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IniFile iniFile=new BasicIniFile();
IniSection dataSection=new BasicIniSection("123");
iniFile.addSection(dataSection);
IniItem nameIniItem=new IniItem("name");
nameIniItem.setValue("利");
dataSection.addItem(nameIniItem);
IniItem ageIniItem=new IniItem("age");
ageIniItem.setValue("23");
dataSection.addItem(ageIniItem);
IniSection dataSection2=new BasicIniSection("321");
iniFile.addSection(dataSection2);
IniItem nameIniItem2=new IniItem("name2");
nameIniItem2.setValue("2");
dataSection2.addItem(nameIniItem2);
IniItem ageIniItem2=new IniItem("age2");
ageIniItem2.setValue("232");
dataSection2.addItem(ageIniItem2);
File file=new File("F:\\TEST.ini");
IniFileWriter niFileWriter=new IniFileWriter(iniFile, file);
try {
niFileWriter.write();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//IniFileReader niFileReader=new IniFileReader(iniFile, file);
}
}
package cn.com.shine.ini;
import java.io.File;
import java.io.IOException;
import org.dtools.ini.BasicIniFile;
import org.dtools.ini.IniFile;
import org.dtools.ini.IniFileReader;
import org.dtools.ini.IniFileWriter;
import org.dtools.ini.IniItem;
import org.dtools.ini.IniSection;
public class Readf {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IniFile iniFile=new BasicIniFile();
File file=new File("F:\\TEST.ini");
IniFileReader rad=new IniFileReader(iniFile, file);
IniFileWriter wir=new IniFileWriter(iniFile, file);
try {
//读取
rad.read();
IniSection iniSection=iniFile.getSection(1);
String string=iniSection.getName();
IniItem iniItem=iniSection.getItem("age2");
String name=iniItem.getValue();
//修改
iniItem.setValue("agaeaaaaaaaaaaaaaaaa");
iniSection.addItem(iniItem);
iniFile.addSection(iniSection);
wir.write();
System.out.println(string+"-212-"+name);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
http://download.csdn.net/detail/u010581811/6469605
源码下载: