www.pudn.com > MobiCraft_src.rar > OptionsReader.java


// style: tabs, tabsize=4, style=ANSI 
//+----------------------------------------------------------------------+ 
// Copyright (c) 2006 Company Name 
// Made by Andrew and Zahar 
//+----------------------------------------------------------------------+ 
// Filename: OptionsReader.java 
//+----------------------------------------------------------------------+ 
// Comment: Позволяет считывать строки из настроечных файлов 
//+----------------------------------------------------------------------+ 
 
package app; 
 
import java.io.*; 
import java.lang.*; 
  
public class OptionsReader 
{ 
    protected InputStream mInputStream; 
 
    public int MAX_STRING_LEN = 300; // Для безопасности 
     
    public OptionsReader() 
    { 
    } 
    public boolean Open(String filename) 
    { 
		mInputStream = getClass().getResourceAsStream(filename); 
		if ( mInputStream == null) 
			return false; 
		return true; 
    } 
     
    public boolean Close() 
    { 
		if ( mInputStream != null) 
			try 
			{ 
				mInputStream.close(); 
			} 
			catch(IOException e) 
			{ 
				return false; 
			} 
		return true; 
    } 
     
    public boolean Opened() 
    { 
		if ( mInputStream == null) 
			return false; 
		return true; 
    } 
    // Читает строку, которая не пустая ( пробелы и т.п. НЕ ингорируются) 
    // Строки начинающиеся с # считаются комментариями и игнорируются. 
    // Если ничего не удалось считать, возвращается null 
    public String ReadString()  
    { 
		if ( ! Opened() ) 
			return null; 
 
		String s=null; 
		boolean bEOF = false; 
		ByteArrayOutputStream mBytes = new ByteArrayOutputStream(); 
		do 
		{ 
			int sLen = 0; 
			s = null; 
			mBytes.reset(); 
			boolean bInCommentary; 
			bInCommentary = false; 
			for (int i =0; i < MAX_STRING_LEN; i++) 
			{ 
				int c; 
				try 
				{ 
					c = mInputStream.read(); 
				} 
				catch(IOException e) 
				{ 
					//System.out.println("? "+e.toString() ); 
					return null; 
				} 
				if (-1 == c) // Строка завершилась концом файла, а не переносом. 
				{ 
					bEOF = true; 
					if ( sLen>0 ) 
					s = mBytes.toString().substring( 0, sLen ); 
					break; 
				} 
				boolean bStop = false; 
				switch (c) 
				{ 
					case '#': 
						bInCommentary = true; // Пропустить конец строки 
						break; 
					case '=': 
					case '\t': 
						if (bInCommentary) 
							break; // Пропустить символ 
					// Иначе делать как и в \r \n 
					case '\n': 
					case '\r': 
						// Finish line 
						bStop = true; 
						if ( sLen>0 ) 
							s = mBytes.toString().substring( 0, sLen ); 
						break; 
 
					default: 
						if (bInCommentary) 
							break; // Пропустить символ 
						sLen++; 
						mBytes.write(c); 
						break; 
				} 
				if (bStop) 
					break; 
			} 
			boolean err = false; 
			if ( s==null ) 
				err=true; 
			else 
			if ( s.length() == 0 ) 
				err=true; 
 
			if (err) 
			{ 
			if ( bEOF ) 
				return null; // Нет больше возомжности считать строку смысловую 
			else 
				continue; // Ищем дальше. 
			} 
			else 
			break; // Нашли 
		} 
		while (true); 
 
		if (mBytes!=null) 
		{ 
			try 
			{ 
				mBytes.close(); 
			} 
			catch(IOException e){} 
 
			mBytes = null; 
		} 
		// TODO: do we need trim()?  
		return (s.trim()); 
    } 
}