当前位置: 首页 > 知识库问答 >
问题:

我可以重用这个读取属性文件的重复函数吗?

步联
2023-03-14

我创建了一个函数,该函数读取给定的属性文件并返回一个包含信息的映射。这很有用,因为项目有多个文件。然而,1文件特别需要我不仅返回不同类型的映射,而且还需要一个额外的“if”子句。这真的让我很困惑,因为我觉得可能有一种方法可以避免重复所有这些代码

/**
 * Loads the given property file and places all it's content in a map
 * @param properties
 * @param fileDirectory
 */
public static Map<String, String> readProperties(Properties properties, String fileDirectory) {
    Map<String, String> propertiesFileContent = new HashMap<>();
    try {
        properties.load(new FileInputStream(fileDirectory));
    } catch (FileNotFoundException e) {
        Useful.printTimeStampedMessage(Constants.EXCEPTION_FILE_NOT_FOUND);
        e.printStackTrace();
    } catch (IOException e) {
        Useful.printTimeStampedMessage(Constants.EXCEPTION_IO);
        e.printStackTrace();
    }   
    
    for (String key : properties.stringPropertyNames()) {
        propertiesFileContent.put(key, properties.get(key).toString());
    }
    return propertiesFileContent;
}

/**
 * Loads the follow property file and places all it's content in a map
 * @param properties
 * @param fileDirectory
 */
public static Map<String, LocalDateTime> readFollowProperties(Properties properties, String fileDirectory) {
    Map<String, LocalDateTime> propertiesFileContent = new HashMap<>();
    try {
        properties.load(new FileInputStream(fileDirectory));
    } catch (FileNotFoundException e) {
        Useful.printTimeStampedMessage(Constants.EXCEPTION_FILE_NOT_FOUND);
        e.printStackTrace();
    } catch (IOException e) {
        Useful.printTimeStampedMessage(Constants.EXCEPTION_IO);
        e.printStackTrace();
    }   
    
    for (String key : properties.stringPropertyNames()) {
        if(!properties.get(key).equals("U") && !properties.get(key).equals("FB")) {
            propertiesFileContent.put(key, LocalDateTime.parse((CharSequence) properties.get(key)));
        }
    }
    return propertiesFileContent;
}

如您所见,这两个功能之间的差异非常小。

  1. 贴图的类型从Map更改

共有1个答案

严俊彦
2023-03-14

您可以编写一个方法,并使其接受布尔值作为参数,如果布尔值为true,第一个版本将运行并返回一个Map

所以你的方法应该返回一个Map

// if you need to return Map<String, LocalDateTime> 
// you should pass true
// if you need to return Map<String,String> you should pass false
Map<String, ?> propsLoad(boolean activeStringStringReturn) throws FileNotFoundException, IOException {
    Properties prop = new Properties();
    prop.load(new FileInputStream("Put your Path here"));
    
    if (activeStringStringReturn== false) {
        Map<String, String> mapProp = prop.entrySet().stream()
                .collect(Collectors.toMap(e -> (String) e.getKey(), e -> (String) e.getValue()));
        return mapProp;
    } 
    else {
        Map<String, LocalDateTime> mapProp = prop.entrySet().stream()
                .filter(e -> !((String) e.getKey()).equals("U") && !((String) e.getKey()).equals("FB"))
                .collect(Collectors.toMap(e -> (String) e.getKey(), e -> LocalDateTime.parse((CharSequence) (e.getValue()) )));
        return mapProp;
    }
}
 类似资料:
  • 在产品代码中,我可以使用以下代码来阅读aws。违约来自

  • TypeError:无法读取应用程序上未定义的属性“collection”。在图层上发布(/home/niko/Desktop/opa/app.js:17:38)。在route的下一个(/home/niko/Desktop/opa/node_modules/express/lib/router/layer.js:95:5)中处理[as handle_request](/home/niko/Desk

  • 我有一个像这样的JSON文件;{“姓名”:“玛丽亚”,“年龄”:“40”,“住址”:“美国”} 我的基本功能是这样的: 问题是如何从JSON文件提供函数

  • 我尝试使用执行一个箭头函数。为简化起见,具体如下: 按预期运行 嗯...这是怎么回事? 我希望下面的代码将作为传递到。 但是,仍然是未定义的。 如果我将其切换为常规函数定义,则所有函数都会按预期工作。 问题 为什么我不能将的上下文从传递到箭头函数中?

  • 我知道有类似的线程讨论范围问题。 使用以下组件 当您单击时,您会得到的属性'setState' 我知道你可以像这样做,但所有这些看起来都很奇怪,只是为了让它工作。 什么被认为是最优雅的方式来做到这一点?当然,人们必须有一个首选的方式,除了眼睛疼痛之外,还有其他好处?

  • 我试图将axios数据作为道具传递给我的组件B。但是在控制台中我得到了未定义的值。如何解决这个问题。我应该只在测试组件的返回区域内传递道具吗?