Commit bad196d7 by Tom Tromey Committed by Tom Tromey

Properties.java (setProperty): New method.

	* java/util/Properties.java (setProperty): New method.
	(store): New method.

From-SVN: r31855
parent 5fa7f88c
2000-02-08 Tom Tromey <tromey@cygnus.com>
* java/util/Properties.java (setProperty): New method.
(store): New method.
2000-02-07 Tom Tromey <tromey@cygnus.com> 2000-02-07 Tom Tromey <tromey@cygnus.com>
* java/lang/Runtime.java (_load): Declare. * java/lang/Runtime.java (_load): Declare.
......
// Properties - Property list representation. // Properties - Property list representation.
/* Copyright (C) 1998, 1999 Red Hat, Inc. /* Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
This file is part of libgcj. This file is part of libgcj.
...@@ -26,7 +26,7 @@ import java.io.PushbackReader; ...@@ -26,7 +26,7 @@ import java.io.PushbackReader;
*/ */
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* Status: Complete to JDK 1.1. * Status: Complete to JDK 1.2.
*/ */
public class Properties extends Hashtable public class Properties extends Hashtable
...@@ -51,6 +51,11 @@ public class Properties extends Hashtable ...@@ -51,6 +51,11 @@ public class Properties extends Hashtable
return r; return r;
} }
public Object setProperty (String key, String value)
{
return put (key, value);
}
public void list (PrintStream out) public void list (PrintStream out)
{ {
Enumeration e = propertyNames (); Enumeration e = propertyNames ();
...@@ -282,99 +287,105 @@ public class Properties extends Hashtable ...@@ -282,99 +287,105 @@ public class Properties extends Hashtable
} }
public synchronized void save (OutputStream out, String comment) public synchronized void save (OutputStream out, String comment)
{ {
try
{
store (out, comment);
}
catch (IOException _)
{
}
}
public synchronized void store (OutputStream out, String comment)
throws IOException
{
// Use a buffer because writing a single string through // Use a buffer because writing a single string through
// OutputStreamWriter is fairly expensive. // OutputStreamWriter is fairly expensive.
BufferedWriter output BufferedWriter output
= new BufferedWriter (new OutputStreamWriter (out)); = new BufferedWriter (new OutputStreamWriter (out));
String newline = System.getProperty("line.separator"); String newline = System.getProperty("line.separator");
try if (comment != null)
{ {
if (comment != null) // We just lose if COMMENT contains a newline. This is
{ // what JDK 1.1 does.
// We just lose if COMMENT contains a newline. This is output.write("#");
// what JDK 1.1 does. output.write(comment);
output.write("#");
output.write(comment);
output.write(newline);
}
output.write("# ");
output.write(new Date().toString());
output.write(newline); output.write(newline);
}
output.write("# ");
output.write(new Date().toString());
output.write(newline);
Enumeration keys = keys (); Enumeration keys = keys ();
while (keys.hasMoreElements()) while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String value = (String) get (key);
// FIXME: JCL says that the key can contain many Unicode
// characters. But it also doesn't say we should encode
// it in any way.
// FIXME: if key contains ':', '=', or whitespace, must
// quote it here. Note that JDK 1.1 does not do this.
output.write(key);
output.write("=");
boolean leading = true;
for (int i = 0; i < value.length(); ++i)
{ {
String key = (String) keys.nextElement(); boolean new_lead = false;
String value = (String) get (key); char c = value.charAt(i);
switch (c)
// FIXME: JCL says that the key can contain many Unicode
// characters. But it also doesn't say we should encode
// it in any way.
// FIXME: if key contains ':', '=', or whitespace, must
// quote it here. Note that JDK 1.1 does not do this.
output.write(key);
output.write("=");
boolean leading = true;
for (int i = 0; i < value.length(); ++i)
{ {
boolean new_lead = false; case '\n':
char c = value.charAt(i); output.write("\\n");
switch (c) break;
{ case '\r':
case '\n': output.write("\\r");
output.write("\\n"); break;
break; case '\t':
case '\r': output.write("\\t");
output.write("\\r"); break;
break; case '\\':
case '\t': output.write("\\\\");
output.write("\\t"); break;
break;
case '\\':
output.write("\\\\");
break;
case '#': case '#':
case '!': case '!':
case '=': case '=':
case ':': case ':':
output.write("\\"); output.write("\\");
output.write(c); output.write(c);
break; break;
case ' ': case ' ':
new_lead = leading; new_lead = leading;
if (leading) if (leading)
output.write("\\"); output.write("\\");
output.write(c); output.write(c);
break; break;
default: default:
if (c < '\u0020' || c > '\u007e') if (c < '\u0020' || c > '\u007e')
{ {
output.write("\\u"); output.write("\\u");
output.write(Character.forDigit(c >>> 12, 16)); output.write(Character.forDigit(c >>> 12, 16));
output.write(Character.forDigit((c >>> 8) & 0xff, output.write(Character.forDigit((c >>> 8) & 0xff,
16)); 16));
output.write(Character.forDigit((c >>> 4) & 0xff, output.write(Character.forDigit((c >>> 4) & 0xff,
16)); 16));
output.write(Character.forDigit(c & 0xff, 16)); output.write(Character.forDigit(c & 0xff, 16));
}
else
output.write(c);
} }
leading = new_lead; else
output.write(c);
} }
output.write(newline); leading = new_lead;
} }
output.write(newline);
output.flush();
}
catch (IOException ignore)
{
} }
}
output.flush();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment