1 can be done using java.util.Properties in combination with its load methods (use a Reader, not an InputStream; after all, it's text you want to read, not bytes).
Do you want to replace all occurrences of all keys of the mapping with their values? If so, you can use keySet() to access the keys of the Properties object (which is still a Map so it has the keySet() method), or stringPropertyNames(). I'd prefer the former as that doesn't create a new Set.
This simple approach has one possible flaw: what if the value for some key contains some other key? For instance, what if my HOSTNAME=VOIP_Server? The replacing of IP will then turn the HOSTNAME not into VOIP_Server but into VO10.11.12.13_Server. This in turn can be fixed by doing the find-and-replace in one single loop, using a regular expression. Just group them all together using |:
Now use
Pattern and Matcher to find all the occurrences of the keys, replacing each occurrence with the right value.