我有一个ini文件的读取,是照以前做的一个C语言改过来的,所以风格像C语言,不过还是挺好用,代码如下:test_getini.java文件:import java.io.*;public class test_getini
{
public static void main(String args[])
{
String s_rtn1="";
String value1="";
String s_section="file_path";
String s_key="client";
String s_section_list1[]=new String[100];
int i=0,i_count=0;
c_get_ini getit=new c_get_ini();
s_rtn1=getit.get_ini("config.ini",s_section,s_key,2);
System.out.println("return value in main is: {"+s_rtn1+"}");
i_count=getit.get_key_count("config.ini",s_section,s_key);
System.out.println("key count: "+i_count);
i_count=getit.get_section_list("config.ini",s_section_list1);
System.out.println("section count: "+i_count);
for(i=0;i<i_count;i++)
System.out.println("section "+(i+1)+" : "+s_section_list1[i]);
}
}
class c_get_ini
{
private final int MAX_LINE=1000;
private String s_fileContent[]=new String[MAX_LINE];
private int i_fileLineCount=0;
public String get_ini(String s_fileName,String s_section,String s_key,int i_num)
{
String s_value="";
int i=0,i_sameKeyCount=0;
int i_t1=0,i_t2=0;
String s_line="",s_section_temp="",s_key_temp="";
if(i_num<=0)
{
System.out.println("the parameter 'i_num' cann't below zero!");
return "not_found";
}
//read file
file_string fs1=new file_string();
i_fileLineCount=fs1.file2string(s_fileName,s_fileContent);
for(i=0;i<i_fileLineCount;i++)
{
if(s_fileContent[i].startsWith("#"))
{
//System.out.println("the "+i+" line is a comment!");
continue;
}
s_line=s_fileContent[i].trim();
if(!((s_line.startsWith("["))&&(s_line.endsWith("]"))))
{
//System.out.println("this line not a section, line number:"+i);
continue;
}
i_t1=s_fileContent[i].indexOf("[");
i_t2=s_fileContent[i].indexOf("]");
s_section_temp=s_fileContent[i].substring(i_t1+1,i_t2).trim();
//System.out.println("current section is : "+s_section_temp);
if(!(s_section_temp.equals(s_section)))
{
//System.out.println("current section is not which you want");
continue;
}
i_sameKeyCount=0;
while(true)
{
i++; //进入文件下一行
if(i==i_fileLineCount) //若到文件尾
return "not_found";
if((s_fileContent[i].startsWith("["))&&(s_fileContent[i].endsWith("]")))
return "not_found";
i_t1=s_fileContent[i].indexOf("=");
if(!(i_t1>0))
continue;
s_key_temp=s_fileContent[i].substring(0,i_t1).trim();
//System.out.println("current line key is : "+s_key_temp);
if(!(s_key_temp.equals(s_key)))
{
//System.out.println("unequal--> s_key_temp:'"+s_key_temp+"'\t"+"s_key:'"+s_key+"'");
continue;
}
i_sameKeyCount++; i_t2=s_fileContent[i].length();
s_value=s_fileContent[i].substring(i_t1+1,i_t2).trim();
if(i_num==i_sameKeyCount)
{
//System.out.println("success return: "+s_value);
return s_value;
}
else
{
//System.out.println("fetch value is: "+s_value);
continue;
}
} //end while(true);
} //end for
return "not_found";
} //end get_ini()
public int get_key_count(String s_fileName,String s_section,String s_key)
{
String s_value="";
int i=0,i_sameKeyCount=0;
int i_t1=0,i_t2=0;
String s_line="",s_section_temp="",s_key_temp="";
try
{
//read file
file_string fs1=new file_string();
i_fileLineCount=fs1.file2string(s_fileName,s_fileContent);
for(i=0;i<i_fileLineCount;i++)
{
if(s_fileContent[i].startsWith("#"))
{
//System.out.println("the "+i+" line is a comment!");
continue;
}
s_line=s_fileContent[i].trim();
if(!((s_line.startsWith("["))&&(s_line.endsWith("]"))))
{
//System.out.println("this line not a section, line number:"+i);
continue;
}
i_t1=s_fileContent[i].indexOf("[");
i_t2=s_fileContent[i].indexOf("]");
s_section_temp=s_fileContent[i].substring(i_t1+1,i_t2).trim();
//System.out.println("current section is : "+s_section_temp);
if(!(s_section_temp.equals(s_section)))
{
//System.out.println("current section is not which you want");
continue;
}
i_sameKeyCount=0;
while(true)
{
i++; //进入文件下一行
if((i==i_fileLineCount)&&(i_sameKeyCount>0)) //若到文件尾
return i_sameKeyCount;
if(i==i_fileLineCount)
return 0; if((s_fileContent[i].startsWith("["))&&(s_fileContent[i].endsWith("]"))&&(i_sameKeyCount>0))
return i_sameKeyCount;
if((s_fileContent[i].startsWith("["))&&(s_fileContent[i].endsWith("]")))
return 0;
i_t1=s_fileContent[i].indexOf("=");
if(!(i_t1>0))
continue;
s_key_temp=s_fileContent[i].substring(0,i_t1).trim();
//System.out.println("current line key is : "+s_key_temp);
if(!(s_key_temp.equals(s_key)))
{
//System.out.println("unequal--> s_key_temp:'"+s_key_temp+"'\t"+"s_key:'"+s_key+"'");
continue;
}
i_sameKeyCount++;
} //end while(true);
} //end for
return 0;
}
catch(Exception e)
{
return 0;
}
} //end get_key_count()
//返回指定配置文件的小节的个数和内容
public int get_section_list(String s_fileName,String s_section_list[])
{
int i_count_section=0;
//---------------
int i=0;
int i_t1=0,i_t2=0;
String s_line="",s_section_temp=""; try
{
//read file
file_string fs1=new file_string();
i_fileLineCount=fs1.file2string(s_fileName,s_fileContent);
i_count_section=0;
for(i=0;i<i_fileLineCount;i++)
{
if(s_fileContent[i].startsWith("#"))
{
//System.out.println("the "+i+" line is a comment!");
continue;
}
s_line=s_fileContent[i].trim();
if(!((s_line.startsWith("["))&&(s_line.endsWith("]"))))
{
//System.out.println("this line not a section, line number:"+i);
continue;
}
i_t1=s_fileContent[i].indexOf("[");
i_t2=s_fileContent[i].indexOf("]");
s_section_temp=s_fileContent[i].substring(i_t1+1,i_t2).trim();
s_section_list[i_count_section]=s_section_temp;
i_count_section++;
//System.out.println("current section is : "+s_section_temp);
} //end for
//---------------
return i_count_section;
}
catch(Exception ee3)
{
System.out.println("Error in get_section_list: "+ee3);
return 0;
}
} //end get_section_list()
} //end class c_get_ini
class file_string
{
public int file2string(String fileName,String Result[])
{
int pointer=0;
boolean done=false;
try
{
File file_in = new File(fileName);
BufferedReader in=new BufferedReader(new FileReader(file_in)); //read the file content and put it into array:Result[]
while(!done)
{
Result[pointer]=in.readLine();
if(Result[pointer]==null)
done=true;
else
pointer++;
}
in.close();
return pointer;
}
catch(IOException e)
{
System.out.println("Error: "+e);
return 0;
}
} public int string2file(String Source[],String fileName,int lineCount)
{
int i;
try
{
File file_out=new File(fileName);
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(file_out)));
for(i=0;i<lineCount;i++)
{
out.println(Source[i]);
//System.out.println(Source[i]);
}
out.flush();
out.close();
return i;
}
catch(IOException e)
{
System.out.println("Error: "+e);
return 0;
}
}
}
{
public static void main(String args[])
{
String s_rtn1="";
String value1="";
String s_section="file_path";
String s_key="client";
String s_section_list1[]=new String[100];
int i=0,i_count=0;
c_get_ini getit=new c_get_ini();
s_rtn1=getit.get_ini("config.ini",s_section,s_key,2);
System.out.println("return value in main is: {"+s_rtn1+"}");
i_count=getit.get_key_count("config.ini",s_section,s_key);
System.out.println("key count: "+i_count);
i_count=getit.get_section_list("config.ini",s_section_list1);
System.out.println("section count: "+i_count);
for(i=0;i<i_count;i++)
System.out.println("section "+(i+1)+" : "+s_section_list1[i]);
}
}
class c_get_ini
{
private final int MAX_LINE=1000;
private String s_fileContent[]=new String[MAX_LINE];
private int i_fileLineCount=0;
public String get_ini(String s_fileName,String s_section,String s_key,int i_num)
{
String s_value="";
int i=0,i_sameKeyCount=0;
int i_t1=0,i_t2=0;
String s_line="",s_section_temp="",s_key_temp="";
if(i_num<=0)
{
System.out.println("the parameter 'i_num' cann't below zero!");
return "not_found";
}
//read file
file_string fs1=new file_string();
i_fileLineCount=fs1.file2string(s_fileName,s_fileContent);
for(i=0;i<i_fileLineCount;i++)
{
if(s_fileContent[i].startsWith("#"))
{
//System.out.println("the "+i+" line is a comment!");
continue;
}
s_line=s_fileContent[i].trim();
if(!((s_line.startsWith("["))&&(s_line.endsWith("]"))))
{
//System.out.println("this line not a section, line number:"+i);
continue;
}
i_t1=s_fileContent[i].indexOf("[");
i_t2=s_fileContent[i].indexOf("]");
s_section_temp=s_fileContent[i].substring(i_t1+1,i_t2).trim();
//System.out.println("current section is : "+s_section_temp);
if(!(s_section_temp.equals(s_section)))
{
//System.out.println("current section is not which you want");
continue;
}
i_sameKeyCount=0;
while(true)
{
i++; //进入文件下一行
if(i==i_fileLineCount) //若到文件尾
return "not_found";
if((s_fileContent[i].startsWith("["))&&(s_fileContent[i].endsWith("]")))
return "not_found";
i_t1=s_fileContent[i].indexOf("=");
if(!(i_t1>0))
continue;
s_key_temp=s_fileContent[i].substring(0,i_t1).trim();
//System.out.println("current line key is : "+s_key_temp);
if(!(s_key_temp.equals(s_key)))
{
//System.out.println("unequal--> s_key_temp:'"+s_key_temp+"'\t"+"s_key:'"+s_key+"'");
continue;
}
i_sameKeyCount++; i_t2=s_fileContent[i].length();
s_value=s_fileContent[i].substring(i_t1+1,i_t2).trim();
if(i_num==i_sameKeyCount)
{
//System.out.println("success return: "+s_value);
return s_value;
}
else
{
//System.out.println("fetch value is: "+s_value);
continue;
}
} //end while(true);
} //end for
return "not_found";
} //end get_ini()
public int get_key_count(String s_fileName,String s_section,String s_key)
{
String s_value="";
int i=0,i_sameKeyCount=0;
int i_t1=0,i_t2=0;
String s_line="",s_section_temp="",s_key_temp="";
try
{
//read file
file_string fs1=new file_string();
i_fileLineCount=fs1.file2string(s_fileName,s_fileContent);
for(i=0;i<i_fileLineCount;i++)
{
if(s_fileContent[i].startsWith("#"))
{
//System.out.println("the "+i+" line is a comment!");
continue;
}
s_line=s_fileContent[i].trim();
if(!((s_line.startsWith("["))&&(s_line.endsWith("]"))))
{
//System.out.println("this line not a section, line number:"+i);
continue;
}
i_t1=s_fileContent[i].indexOf("[");
i_t2=s_fileContent[i].indexOf("]");
s_section_temp=s_fileContent[i].substring(i_t1+1,i_t2).trim();
//System.out.println("current section is : "+s_section_temp);
if(!(s_section_temp.equals(s_section)))
{
//System.out.println("current section is not which you want");
continue;
}
i_sameKeyCount=0;
while(true)
{
i++; //进入文件下一行
if((i==i_fileLineCount)&&(i_sameKeyCount>0)) //若到文件尾
return i_sameKeyCount;
if(i==i_fileLineCount)
return 0; if((s_fileContent[i].startsWith("["))&&(s_fileContent[i].endsWith("]"))&&(i_sameKeyCount>0))
return i_sameKeyCount;
if((s_fileContent[i].startsWith("["))&&(s_fileContent[i].endsWith("]")))
return 0;
i_t1=s_fileContent[i].indexOf("=");
if(!(i_t1>0))
continue;
s_key_temp=s_fileContent[i].substring(0,i_t1).trim();
//System.out.println("current line key is : "+s_key_temp);
if(!(s_key_temp.equals(s_key)))
{
//System.out.println("unequal--> s_key_temp:'"+s_key_temp+"'\t"+"s_key:'"+s_key+"'");
continue;
}
i_sameKeyCount++;
} //end while(true);
} //end for
return 0;
}
catch(Exception e)
{
return 0;
}
} //end get_key_count()
//返回指定配置文件的小节的个数和内容
public int get_section_list(String s_fileName,String s_section_list[])
{
int i_count_section=0;
//---------------
int i=0;
int i_t1=0,i_t2=0;
String s_line="",s_section_temp=""; try
{
//read file
file_string fs1=new file_string();
i_fileLineCount=fs1.file2string(s_fileName,s_fileContent);
i_count_section=0;
for(i=0;i<i_fileLineCount;i++)
{
if(s_fileContent[i].startsWith("#"))
{
//System.out.println("the "+i+" line is a comment!");
continue;
}
s_line=s_fileContent[i].trim();
if(!((s_line.startsWith("["))&&(s_line.endsWith("]"))))
{
//System.out.println("this line not a section, line number:"+i);
continue;
}
i_t1=s_fileContent[i].indexOf("[");
i_t2=s_fileContent[i].indexOf("]");
s_section_temp=s_fileContent[i].substring(i_t1+1,i_t2).trim();
s_section_list[i_count_section]=s_section_temp;
i_count_section++;
//System.out.println("current section is : "+s_section_temp);
} //end for
//---------------
return i_count_section;
}
catch(Exception ee3)
{
System.out.println("Error in get_section_list: "+ee3);
return 0;
}
} //end get_section_list()
} //end class c_get_ini
class file_string
{
public int file2string(String fileName,String Result[])
{
int pointer=0;
boolean done=false;
try
{
File file_in = new File(fileName);
BufferedReader in=new BufferedReader(new FileReader(file_in)); //read the file content and put it into array:Result[]
while(!done)
{
Result[pointer]=in.readLine();
if(Result[pointer]==null)
done=true;
else
pointer++;
}
in.close();
return pointer;
}
catch(IOException e)
{
System.out.println("Error: "+e);
return 0;
}
} public int string2file(String Source[],String fileName,int lineCount)
{
int i;
try
{
File file_out=new File(fileName);
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(file_out)));
for(i=0;i<lineCount;i++)
{
out.println(Source[i]);
//System.out.println(Source[i]);
}
out.flush();
out.close();
return i;
}
catch(IOException e)
{
System.out.println("Error: "+e);
return 0;
}
}
}
#You can add comment in config file,
#but the comment line should begin with the symbol "#" as this config file.[transfer_mode]
mode=2 [ address ]
ip = 196.97.1.168
ip=aaaa
ip=asdf[file_path]
client = D:\MyCode\
server= /data/biller/tuxftp/tt/
client= D:\asdf [filetype]
type=*.wf
在java中一个StringTokenizer的类,这个类,可以根据分割符,自动的提取数据,在C/C++中也有类似的函数,之前使用BufferedReader读取数据,这样相对要好一些,
下面是一个简单的例子import java.io.*;
import java.util.*;
import java.sql.*;public class LoadFile
{
public static void main(String[] Args){
String sGetOneLine;
String sTemplateFileName = new String("e:\\temp\\Cargo1.txt");
/******
*tag is "/"
*/
Vector RecordTagPlaceBuffer = new Vector();
try{
BufferedReader readfileobject = new BufferedReader(new FileReader(sTemplateFileName));
while ((sGetOneLine = readfileobject.readLine()) != null){
StringTokenizer st = new StringTokenizer(sGetOneLine,"/");
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
}
}
catch(IOException e){
System.err.println("IOException: " + e);
}
System.out.println("is ok!");
}
}
我认为这样会方便一点。
ok?
规范里规定了文件的格式,否则我当然会用xml或者数据库。
InputStream is = getClass().getResourceAsStream("/db.properties");
Properties dbProps = new Properties();
try {
dbProps.load(is);
}
catch (Exception e) {
System.err.println("Can't read the properties file. " +
"Make sure db.properties is in the CLASSPATH");
return;
}
String logFile = dbProps.getProperty("logfile", "DBConnectionManager.log");
try {
log = new PrintWriter(new FileWriter(logFile, true), true);
}
catch (IOException e) {
System.err.println("Can't open the log file: " + logFile);
log = new PrintWriter(System.err);
}