开发者社区> 问答> 正文

这个读取文件的代码有没有问题?:报错

 

public class GetProperties {
	private static Properties config = null;
	static {
		InputStream in = GetProperties.class.getClassLoader()
				.getResourceAsStream("default.properties");
		config = new Properties();
		try {
			config.load(in);
			in.close();
		} catch (IOException e) {
			System.out.println("No default.properties defined error!");
		}
	}
	// 根据key读取value
	public static String readValue(String key) {
		try {
			String value = config.getProperty(key);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("ConfigInfoError" + e.toString());
			return null;
		}
	}
	// 读取properties的全部信息
	public static void readAllProperties() {
		try {
			@SuppressWarnings("rawtypes")
			Enumeration en = config.propertyNames();
			while (en.hasMoreElements()) {
				String key = (String) en.nextElement();
				String Property = config.getProperty(key);
				System.out.println(key +": "+ Property);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("ConfigInfoError" + e.toString());
		}
	}
}

请大家帮我分析下 这样读取文件信息会不会有泄露的问题?

展开
收起
kun坤 2020-06-07 00:51:17 514 0
1 条回答
写回答
取消 提交回答
  • 泄漏什么呢?

    另外 in.close() 要放在 finaly {} 块去执行

    ######

    那个close我改下位置!这段代码也不是我也写我在网上找的。

    这个类会被频繁使用,使用的方式就是GetProperties.readValue("name"); 它是怎么工作的呢?jvm会不会每次都去创建这个类?还是每次都去加载这个.class文件,还是只加载一次!

    ######

    引用来自“红薯”的答案

    泄漏什么呢?

    另外 in.close() 要放在 finaly {} 块去执行

    jvm会创建这类的实例吗?这个类被GetProperties.readValue("name")这样频繁使用!jvm是不是每次都去读取文件呢?每次都加在这个.class文件?
    ######

    引用来自“javacc”的答案

    引用来自“红薯”的答案

    泄漏什么呢?

    另外 in.close() 要放在 finaly {} 块去执行

    jvm会创建这类的实例吗?这个类被GetProperties.readValue("name")这样频繁使用!jvm是不是每次都去读取文件呢?每次都加在这个.class文件?
     private static Properties config = null;
            static {
                InputStream in = GetProperties.class.getClassLoader()                    .getResourceAsStream("default.properties");
                config = new Properties();
                try {
                    config.load(in);
                    in.close();
                } catch (IOException e) {
                    System.out.println("No default.properties defined error!");
                }
            }
    这不是你自己写的么。。。
    2020-06-07 00:51:21
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载