• Java读写Properties文件及JavaIO中字节流和字符的转换


    读写properties文件

    Java读写Properties文件是一个比较常见的需求,一般的做法是将properties文件读到Properties类对象中,通过Properteis对象来操作。下面是一段实例代码:

        /**
         * Read Properties file with ASCII codes only
         */
     public static Properties getProperties(String fileName, String path){
        	Properties props = new Properties();
        	
        	InputStream in = null;
    		try {
    			in = new FileInputStream(path + fileName);
    		} catch (FileNotFoundException e1) {
    			System.out.println("Can't find c3p0.properties");
    		}
    		
        	try {
    			props.load(in);
    			in.close();
    		} catch (IOException e) {
    			System.out.println("Can't load c3p0.properties");
    		}    	   	
    		
    		return props;
        }
    上面的代码是用于读取仅包含ASCII码的properties文件,特点是只用了FileInputStream,而没有像往常一样在外面套个FileReader。下面的代码用于写ASCII编码的properties文件:

        /**
         * 
         */
        private void setPassword(String passWord){
        	Properties props = DBUtil.getC3P0Properties();
        	FileOutputStream out;
    		try {
    			String path = DBUtil.getFullPath(this.getClass());
    			out = new FileOutputStream(path + "/c3p0.properties" );
    	    	        props.setProperty("c3p0.password", passWord);
    	    	        props.store(out, "Prevent connect for failed connection");
    	    	        out.close();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        }

    字节流到字符的转换

    关于Java I/O的更全面信息,可以参考Developerworks上的这篇文章:http://www.ibm.com/developerworks/cn/java/j-lo-javaio/

    这里贴一下StreamDecoder中的核心方法,看看StreamDecoder是怎样将Stream转为Character的吧:

      private int read0() throws IOException {
            synchronized (lock) {
    
                // Return the leftover char, if there is one
                if (haveLeftoverChar) {
                    haveLeftoverChar = false;
                    return leftoverChar;
                }
    
                // Convert more bytes
                char cb[] = new char[2];
                int n = read(cb, 0, 2);
                switch (n) {
                case -1:
                    return -1;
                case 2:
                    leftoverChar = cb[1];
                    haveLeftoverChar = true;
                    // FALL THROUGH
                case 1:
                    return cb[0];
                default:
                    assert false : n;
                    return -1;
                }
            }
        }

    从上面的代码可以看出,StreamDecoder每次读入两个byte,然后逐个字节进行解析。

  • 相关阅读:
    hdu 4332 Constructing Chimney 夜
    poj 2449 Remmarguts' Date 夜
    poj 2728 Desert King 夜
    poj 1639 Picnic Planning 夜
    poj 1125 Stockbroker Grapevine 夜
    poj 3621 Sightseeing Cows 夜
    hdu 4333 Revolving Digits 夜
    hdu 4345 Permutation 夜
    hdu 1874 通畅工程续 夜
    es6(二)
  • 原文地址:https://www.cnblogs.com/jubincn/p/3381112.html
Copyright © 2020-2023  润新知