Manoj
Manoj

Reputation: 5612

Apache commons configuration reading properties in the format a.<no>.b

I have a properties file that says

window.1.height=100
window.1.width=80

window.2.height=50
window.2.width=30

window.3.height=150
window.3.width=100

I am using the PropertiesConfiguration class and reading the properties. How can I know the count of windows in the properties. Is therea pattern search

Upvotes: 1

Views: 2427

Answers (3)

user871611
user871611

Reputation: 3462

The api has it already onboard. See Configuration#subset

Upvotes: 0

Dustin Wilhelmi
Dustin Wilhelmi

Reputation: 1829

There are a couple of things you can do if you have any control over the properties file itself. If you are locked into that format, I don't believe there is anything you can do.

However, if you are not locked into that format, here are a couple of solutions:

XML Configuration

Change from a properties file to an XML file format. Something like this:

<windows>
  <window>
    <width>80</width>
    <height>100</height>
  </window>
  <window>
    <width>30</width>
    <height>50</height>
  </window>
  <window>
    <width>100</width>
    <height>150</height>
  </window>
</windows>

Then use XMLConfiguration instead of PropertiesConfiguration. You could then call

config.getList("windows").size()

to get the count of windows.

Properties Configuration

Your other option, which still involves a properties file, is a little bit more contrived. Your properties file would change to look like this:

window.height=100
window.width=80

window.height=50
window.width=30

window.height=150
window.width=100

Then to get the number of windows you would call

config.getList("window.height").size();

However, using this method, you would have to change how you retrieve the values. For example, in order to get the width and height of the second window, you would use this:

config.getInteger("window.width(1)");
config.getInteger("window.height(1)");

Using parens, you can access an individual element of a list, using zero-based indicies. It is a little more difficult to understand, but it would work.

Upvotes: 1

karakuricoder
karakuricoder

Reputation: 1075

I usually use something like

int i = 0;
String val;
for(;;) {
  val = props.get("foo" + i);
  if (null == val) {
     break;
  }
  //process val
}

This places the constraint that the counter values must be contiguous.

Upvotes: 1

Related Questions