⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsedproperties.java

📁 peersim仿真chord协议的测试过的环境
💻 JAVA
字号:
/* * Copyright (c) 2003-2005 The BISON Project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 2 as * published by the Free Software Foundation. * * 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 License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */		package peersim.config;import java.io.*;import java.util.*;/*** Extends the class {@link ConfigProperties} with basic parsing capabilities.* @see #load*/public class ParsedProperties extends ConfigProperties {//================= variables ======================================//==================================================================// ================= initialization =================================// ==================================================================/*** Calls super constructor.* @see ConfigProperties#ConfigProperties(String[])*/public	ParsedProperties( String[] pars ) {	super( pars );}// ------------------------------------------------------------------/*** Calls super constructor.* @see ConfigProperties#ConfigProperties(String)*/public	ParsedProperties( String filename ) throws IOException {	super( filename );}// =========== Public methods ========================================// ===================================================================/*** Loads given file. It works exactly as <code>Properties.load</code>* with a file input stream to the given file, except that the file is parsed* the following way allowing to compress some property names* using <code>{</code> and <code>}</code>.    When a bracket is present, it must  be the only non-space element of a line. The last property defined   before the opening bracket define the prefix that is added to all the   properties defined included between brackets.  In other words, a construct like this:  <pre>  control.degree GraphObserver   {    protocol newscast    undir  }  </pre>  is equivalent to the definition of these three properties:  <pre>  control.degree GraphObserver   control.degree.protocol newscast  control.degree.undir  </pre>    Nested brackets are possible. The rule of the last property before   the opening bracket applies also to the inside brackets, with  the prefix being the complete property definition (so, including  the prefix observed before). Example:  <pre>	control.1 DynamicNetwork	{	  add CRASH	  substitute	  init.0 WireKOut 	  {	    degree DEGREE	    protocol 0	  }	}  </pre>  defines the following properties:  <pre>	control.1 DynamicNetwork	control.1.add CRASH	control.1.substitute	control.1.init.0 WireKOut 	control.1.init.0.degree DEGREE	control.1.init.0.protocol 0  </pre>    <p>  Know limitations:   The parsing mechanism is very simple; no complex error messages  are provided. In case of missing closing brackets, the method  will stop reporting the number of missing brackets. Additional  closing brackets (i.e., missing opening brackets) produce an  error messages reporting the line where the closing bracket  is present. Misplaced brackets (included in lines that  contains other characters) are ignored, thus may indirectly produce  the previous error messages.*/public void load( String fileName ) throws IOException {	/* This set is used to store prefixes that have been associated	 * to brackets blocks. If a prefix is inserted twice, this means	 * that there are two blocks referring to the same prefix - 	 * which may be caused by a commented prefix in the config	 * file, something like this:	 * 	 *  prefix1	 *  {	 *    property 1	 *  }	 *  #prefix2	 *  {	 *    property 2	 *  }	 *	 */	Set<String> prefixes = new HashSet<String>();		BufferedReader f = 		new BufferedReader(new FileReader( fileName ));	int lines = 0;	parseStream(f, "", 0, lines, prefixes);	f.close();}// --------------------------------------------------------------------private int parseStream(BufferedReader f, String prefix, int pars, 		int lines, Set prefixes)throws IOException {	if (prefix.equals(".")) {		System.err.println("Error at line " + lines + ": bracket block not " +				"associated with any configuration entry");		System.exit(1);	}	if (prefixes.contains(prefix)) {		System.err.println("Error at line " + lines + ": multiple bracket " +				"blocks referring to the same configuration entry " + prefix);		System.exit(1);	} else {		prefixes.add(prefix);	}		boolean complete = true;	String part;	String line = "";	String last = "";	while ((part = f.readLine()) != null)	{		lines++;				// Reset line		if (complete) line = "";				// Check if the line is a comment line		// If so, remove the comment		int index = part.indexOf('#');		if (index >= 0)		{			part = part.substring(0, index);		} 		// Check if the line is empty		part = part.trim();		if ("".equals(part)) continue;		complete = (part.charAt(part.length()-1) != '\\'); 		if (!complete)		{  			line = line + part.substring(0, part.length()-2) + " ";			continue;		}				// Complete the line		line = line + part;		if (line.equals("{"))		{			lines = parseStream(f, last+".", pars+1, lines, prefixes);		} 		else if (line.equals("}"))		{			if (pars == 0)			{				System.err.println(					"Error: Additional } at line " + lines + 					" when parsing the configuration file");				System.exit(1);			}			return lines;		}		else		{			// Search the first token			String[] tokens = line.split("[\\s:=]+", 2);			if (tokens.length == 1)			{				setProperty(prefix+tokens[0], "");			}			else			{				setProperty(prefix+tokens[0], tokens[1]);			}			last = prefix + tokens[0];		}	}	if (pars == 1)	{		System.err.println("Error: One closing bracket ('}') is missing");		System.exit(1);	} 	else if (pars > 1)	{		System.err.println("Error: " + pars+" closing brackets ('}') are missing");		System.exit(1);	}	return lines;}// --------------------------------------------------------------------/*public static void main(String[] args){	java.util.Properties prop = new ParsedProperties(args);}*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -