2

给定以下属性文件,

abc=10
bcd=20
cde=11
def=321

如何获取属性文件的第一个键(在这种情况下abc)?

4

6 回答 6

2

您可以使用stringPropertyNames()方法,它返回一个 Set 键。

Properties prop = new Properties();
        try {
          prop.load(new FileInputStream("config.properties"));
            Set<String> keys = prop.stringPropertyNames();
            TreeSet<String> sorted = new TreeSet<>(keys);
            System.out.println(sorted.iterator().next());//returns abc
        } catch (IOException ex) {
            ex.printStackTrace();
        }

但请记住,对 stringPropertyNames() 的调用会返回一个未排序的 Set,这仅在您的属性文件已排序时才有效。

于 2012-12-06T12:16:30.757 回答
1

基本不用java.util.Properties。这是基于一个没有排序概念的哈希表。

目前尚不清楚上下文是什么,但如果可能,请使用已知键作为“最重要的”或您想要实现的任何内容。

于 2012-12-06T12:14:23.433 回答
1

您可以使用以下方法获取键的枚举propertyNames

http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#propertyNames ()

但是,API 中没有任何内容可以保证枚举中的第一个将是文件中的第一个。关心属性文件的顺序是相当不寻常的——如果你能解释为什么你想要这个,它可能有助于获得更好的答案。

于 2012-12-06T12:17:51.867 回答
0

正如上面 JS 指出的那样,如果你想有秩序感,你不应该使用属性。另一方面,如果您已经在项目中使用/继承它,则此代码将起作用。

 public static void main( String[] args )
    {
        Properties prop = new Properties();
        p.load("properties.txt");

        try {
            //set the properties value
            prop.getProperty("abc");
            }catch (IOException ex) {
            ex.printStackTrace();
        }
于 2012-12-06T12:15:29.600 回答
0

只需阅读文件:

BufferedReader b = new BufferedReader(new FileReader("Ranjan.properties"));
String line, firstPropertyKey;
// loop ignore initial whitespace
while ((line = b.readLine())!=null && line.trim().equals(""));
// whitespace gone (or end of file reached)
if (line != null) firstPropertyKey = line.split("=")[0].trim();

因为上面的代码对于没有经验的开发者来说比较容易混淆,所以while循环也可以这样写:

while ((line = b.readLine())!=null && line.trim().equals("")) { /*no body*/ }

也就是说,它不需要正文,并且if语句在循环之外。另请注意,WHILE 循环不仅检查条件,而且从文件中读取一行并将其分配给line变量。

于 2012-12-06T12:28:45.290 回答
0

你可以试试下面的代码。其他用户提到的枚举不会给您正确的顺序,但是当您想将值从属性文件传递到另一个方法时,此方法很有帮助。例如,另一个方法(值);

try {
        File file = new File("jasper.properties");
        FileInputStream fileInput = new FileInputStream(file);
        Properties properties = new Properties();
        properties.load(fileInput);
        fileInput.close();

        Enumeration enuKeys = properties.keys();
        while (enuKeys.hasMoreElements()) {
            String key = (String) enuKeys.nextElement();
            String value = properties.getProperty(key);
            System.out.println(key + ": " + value);

            if(value=="10"){
                doSomething();
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

这是我的 jasper.properties 文件

key=bond.investment , value=10  
key=bond.encashment, value=15 
bond.investment=10  
bond.encashment=15
于 2017-06-20T06:40:53.090 回答