Properties : Java Glossary

*0-9ABCDEFGHIJKLMNOPQRSTUVWXYZ (all)

Properties

java.util.Properties is a platform-independent generalisation of the DOS (Disk Operating System) SET environment, or the Windows *.INI files. In Java, even each object could have its own list of properties. A program can determine if an entry is missing in the property file and provide a default to using it its place. Even though property names typically have dots in them, there is no matching hierarchical structure like the NT registry, not even sections as with the Win 3.1 INI files. Properties are just glorified Hashtables that can be backed to disk in human-readable format. You lookup by property name and get a value. Properties also can be used to store other sorts of key=value data on disk. (They will even work with key:value or key value pairs.)

Accessing Delphi Properties
Overriding/Setting Network Properties
System Properties Default File and Console Encoding
os.name Which Properties You will See
Property File Syntax Dots in Path, Classpath and java.library.path
User Properties Learning More
Sample Code Bat/Btm File Properties
JavaBean Properties Links

Accessing

You can interrogate the run-time environment with code like this:

// get a system property
String vendor = System.getProperty( "java.vendor" );
out.println( vendor );

To discover the entire list of supported system properties and their current values you could use code like this:

Unfortunately that code produces a list in scrambled order. It won’t be either alphabetical or in the order of the original properties file, because underneath, Properties are just old fashioned, non-generified Hashtables, supporting the old fashioned, non-generified Enumeration interface.

The System properties are generated by a magic native method System.initProperties. There is no corresponding jar element or *.properties file on disk. file. You can temporarily add a System property with the -D option on the java.exe line. You can also use the technique to pass the value of a SET variable in as a system property. For Applets, there is a similar PARAM mechanism that generates a properties table.

When you are debugging an Applet, you can see the system properties by typing s on the Applet console. You can dump the parameters (these are not system properties) in an app with:

// debugging dump System properties on the console
System.getProperties().list( System.out );

Overriding/Setting System and User Properties on the Command Line

You can put properties on the command line like this:

java.exe -Dflavour=strawberry -jar myapp.jar

If you use Jet, you can set them in JetPack II on the resources page in the bottom right panel.

If you use myapp.jar instead of java.exe myapp.jar you cannot specify system properties. I don’t know any way to specify them in the SET environment (other than by transferring them to the command line with %).

If you have a property with a space in it quote the whole thing like this:

If you want to embed properties inside the jar, put them in a *.properties file, include them as a resource, read the resource and call System.setProperty for each key=value pair. This will only work for some properties. Many of them take effect even before your main method starts executing, things like properties to define the size of the address space.

I am not aware of any direct technique to control the system properties with SET parameters.

System Properties

You get the properties one at a time (mandatory in unsigned Applets):

System.getProperty( "java.version" );

Or you can get all the properties at once:

System.getProperties().getProperty( "java.version" );
so you won’t trigger a security violation in an Applet in the process of getting one of the unrestricted properties. System.getProperties will always raise a security exception in an Applet (since it fetches both everything, both restricted and unrestricted properties) but System.getProperty may or may not, depending on which property you ask for.

Here is how you can set a property to turn on anti-aliasing.

// turn on anti-aliasing for smooth fonts.
System.setProperty( "swing.aatext", "true" );
System Properties
System
PropertyName
Typical Value Description accessible
in unsigned
Applet?
awt.toolkit sun.awt.windows.WToolkit name of AWT (Advanced Windowing Toolkit) implementation
awt.useSystemAAFontSettings what sort of anti-aliasing to use.
browser sun.plug-in name of browser
browser.version 1.1 version of browser
deployment.browser.path "X:\Program Files (x86)\Mozilla Firefox\firefox.exe" Browser to use when Java Applet wants to display HTML (Hypertext Markup Language)
deployment.cache.max.size -1 Limit on cache size.
deployment.console.startup.mode SHOW Whether you want the console to show.
deployment.javaws.concurrentDownloads 4 Max number of simultaneous downloads.
deployment.javaws.home.jnlp.url http://java.sun.com/products/javawebstart Home page for Java Web Start
deployment.max.output.file.size 10 ??
file.encoding Cp1252 default encoding e.g. Cp1252
file.separator \ File separator (e.g.,\ for Windows, / for Unix)
java.awt.graphicsenv sun.awt.Win32GraphicsEnvironment
java.awt.printerjob sun.awt.windows.WPrinterJob
java.class.path wassup.jar Java classpath
java.class.version 52.0 Java class file format version number
java.endorsed.dirs C:\Program Files\Java\jre8\lib\endorsed
java.ext.dirs C:\Program Files\Java\jre8\lib\ext\;C:\Windows\Sun\Java\lib\ext\ Path of extension directory or directories
java.home C:\Program Files\Java\jre8 Java JRE (Java Runtime Environment) installation directory. Note this does not typically match your JAVA_HOME environment variable.
java.io.tmpdir APPDATA\Local\Temp\ Default temp directory
java.library.path C:\Program Files\Java\jre8\bin;
C:\Windows\Sun\Java\bin;
C:\Windows\system32;
C:\Windows;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
. ;
E:\Program Files\Java\jdk1.8.0\bin;
E:\env;
E:\sys;
F:\Program Files (x86)\jet9.0-pro-x86\bin;
F:\Program Files\JPSoft\TCMD16x64;
F:\Program Files\vslick\win;
F:\Program Files (x86)\apache-ant-1.9.0\bin;
E:\com\mindprod\reorg;
F:\Program Files\TortoiseSVN\bin;
F:\Program Files (x86)\asm;
F:\Program Files (x86)\Common7\IDE (Integrated Development Environment) \CommonExtensions\Microsoft\TestWindow;
F:\Program Files (x86)\Common7\IDE \;
F:\Program Files (x86)\VC\BIN;
F:\Program Files (x86)\Common7\Tools;
C:\Windows\Microsoft.NET\Framework\v4.0.30319;
C:\Windows\Microsoft.NET\Framework\v3.5;
F:\Program Files (x86)\VC\VCPackages;
F:\Program Files (x86)\Team Tools\Performance Tools;
C:\Program Files (x86)\Windows Kits\8.0\bin\x86;
C:\Program Files (x86)\Microsoft SDKs (Software Development Kits) \Windows\v8.0A\bin\NETFX 4.0 Tools;
F:\cygwin\bin;
.
List of paths to search when loading libraries.
Contains the exe path. On Linux and Mac, legs will be separated by : not ; .
java.protocol.handler.pkgs package prefixes to search for custom protocol handler classes.
Packages separated by |.
java.runtime.name Java(TM) SE Runtime Environment
java.runtime.version 1.8.0-b132 Java Runtime version.
java.specification.name Java Platform API (Application Programming Interface) Specification Java Runtime Environment specification name
java.specification.vendor Oracle Corporation Java Runtime Environment specification vendor
java.specification.version 1.8 Java Runtime Environment specification version
java.vendor Oracle Corporation JRE vendor
java.vendor.url http://java.oracle.com/ JRE vendor URL (Uniform Resource Locator)
java.version 1.8.0_131 JRE version number
java.vendor.url.bug http://bugreport.sun.com/bugreport/ Where to report bugs
java.vm.info mixed mode
java.vm.name Java HotSpot(TM) 64-Bit Server VM Java Virtual Machine implementation name
java.vm.specification.name Java Virtual Machine Specification Java Virtual Machine specification name
java.vm.specification.vendor Oracle Corporation Java Virtual Machine specification vendor
java.vm.specification.version 1.8 Java Virtual Machine specification version
java.vm.vendor Oracle Corporation Java Virtual Machine implementation vendor
java.vm.version 25.0-b70 Java Virtual Machine implementation version
line.separator [hex chars: 0x0d 0x0a i.e. CrLf, \r\n] Line separator, e.g. \r\n on Windows, \r on Mac, \n on Unix
os.arch amd64 Operating system architecture, e.g. x86, amd64 for 64 bit mode.
os.name Windows 7 Operating system name, e.g. Vista, Windows 7
os.version 6.1
path.separator ; Path separator (e.g., ; for Windows; : for Unix)
sun.arch.data.model 64
sun.awt.enableExtraMouseButtons true
sun.boot.class.path C:\Program Files\Java\jre8\lib\resources.jar;
C:\Program Files\Java\jre8\lib\rt.jar;
C:\Program Files\Java\jre8\lib\sunrsasign.jar;
C:\Program Files\Java\jre8\lib\jsse.jar;
C:\Program Files\Java\jre8\lib\jce.jar;
C:\Program Files\Java\jre8\lib\charsets.jar;
C:\Program Files\Java\jre8\lib\jfr.jar;
C:\Program Files\Java\jre8\classes
Classpath with all of Sun and browser jars.
sun.boot.library.path C:\Program Files\Java\jre8\bin where DLLs (Dynamic Link Libraries) are.
sun.cpu.endian little
sun.cpu.isalist amd64 Using 64-bit addressing.
sun.desktop windows
sun.io.unicode.encoding UnicodeLittle endian, UnicodeLittle or UnicodeBig
sun.java.command E:\com\mindprod\wassup\wassup.jar
sun.java.launcher SUN_STANDARD
sun.jnu.encoding Cp1252
sun.management.compiler HotSpot 64-Bit Tiered Compilers
sun.os.patch.level Service Pack 1
sun.stderr.encoding cp850
sun.stdout.encoding cp850
swing.aatext true turns on anti-aliasing for smooth fonts in 
Java version 1.5 or later
user.country US two-letter country code, upper case. This is broken. It will say US for countries such as Canada. Oracle is telegraphing imperialistic plans.
user.country.format CA two-letter country code, upper case. I am not sure if setting this property is sufficient to select a different locale, unless the app looks at this field.
user.dir E:\com\mindprod\wassup User’s current working directory
user.home C:\Users\user User home directory
user.language en two-letter language code, lower case. I am not sure if setting this property is sufficient to select a different locale, unless the app looks at this field.
user.name Roedy User account name.
user.region CA two-letter country code, upper case, used for DVD (Digital Video Disc) region code digital rights enforcement.
user.script
user.timezone America/Los_Angeles time zone name e.g. America/Los_Angeles for PST (Pacific Standard Time).
not always available.
Use TimeZone. getDefault() instead.
user.variant

In addition there are the net SSL (Secure Sockets Layer) properties:

SSL properties
javax.net.ssl.keyStore Location of the Java keystore
javax.net.ssl.keyStorePassword password for Java keystore
javax.net.ssl.trustStore Certificate Authority cacerts file
javax.net.ssl.trustStorePassword password for certificate Authority cacerts file
javax.net.ssl.trustStoreType JKS (Java Key Store)
javax.net.debug SSL - debug SSL

Which Properties Will You See?

There are a number of other less commonly used properties I did not list. See Wassup for a list of them. Applications and Jet compiled applications will see the most properties. Signed Applets will see somewhat fewer and unsigned Applets will see only a few. The policy file controls which you will see.

The only way I know of to determine which properties are safe in unsigned Applets and which are restricted to applications and signed Applets is to write test Applet to fetch the properties and see which ones raise an Exception.

I used an unsigned version of Wassup to create this table. There are even more properties I did not list, especially if you run in a browser or under Jet.

There are also system properties for proxies that you are not present when there are no proxies.

There are no system properties to tell you about the JDK (Java Development Kit).

There is no system property to tell you how many CPUs (Central Processing Units) there are. However, you can get it with Runtime.availableProcessors.

You can also dynamically set the system properties with System. setProperty, but, of course, the Security Manager will be on your case if you do this in an unsigned Applet.

Dots in Path, Classpath and java.library.path

In Windows, a dot in the environment PATH means search the current directory. Normally you leave it out and one is presumed at the head of the PATH.

In all OSes, in the classpath, a dot means search the current directory. If you leave it out, the current directory will not be searched for class files.

Java creates the java.library.path from the environment PATH, adding to it. If it finds no dot in the PATH, it adds one at the end of the java.library.path.

In the Mac dot is automatically included in the java.library.path.

os.name

Here are the values Sun uses for the os.name property to identify various platforms:
os.name
AIX (Advanced Interactive eXecutive)
Digital Unix
FreeBSD
HP (Hewlett Packard) UX
Irix
Linux
Mac OS (Operating System)
Mac OS X
MPE/iX
Netware 4.11
OS/2
Solaris
Windows 2000
Windows 7
Windows 8
Windows 10
Windows 95
Windows 98
Windows NT
Windows Vista
Windows XP

Property File Syntax

Properties files are not very user-friendly. They were intended to be composed by programmers. There are many syntax rules that you need to know in order to use them.

Look at any *.properties files file to see an example. It will look something like this example:

In Java version 1.5 or later, there is an alternate XML (extensible Markup Language) format that lets you use encodings to handle awkward characters.

User Properties

In contrast to the natively generated system properties, ordinary user Properties are usually loaded into RAM (Random Access Memory) in their entirety and indexed for rapid Hashtable access and are later saved to flat files on disk with the *.properties extension. Properties files on disk are similar to the old Windows 3.1 INI files, except they have no […] sections.

The key thing to understand is that, in RAM, Properties are just glorified Hashtables. The documentation, at first reading, makes them sound as if they are much more complicated than they really are. Unlike ordinary Hashtables, they can be backed up to flat files that look like a bit like *.INI files. These files are loaded as a whole into RAM Hashtables for searching. The files are never linearly searched on disk to look up keys. Searching is always done with the RAM-resident Hashtable. You could access a property in a sample.properties file like this:

Since Properties are Hashtables, they scramble the order of the elements. If you want to preserve order and don’t need key lookup, you can parse the file yourself with a StreamTokenizer and put it in an array. See how com.mindprod.business.Misc.loadProprerties code used by Learn To Count loads its ordered list of languages and classes from a properties file. Learn to Count keeps its properties file in the jar file. It accesses the file with:

then later uses a StreamTokenizer to process it.

To create a new Properties file from scratch programmatically, remember that java.util.Properties is a subclass of java.util.Hashtable. Just create a new Properties object, add the elements to it as if it were a Hashtable and finally save it with Properties.store() or the JDK 1.2-deprecated Properties.save() in old Javas.

Sample Code

Here is some typical code to access properties:

JavaBean Properties

Property has a second meaning. In JavaBeans, components have associated persistent objects. You can modify various fields in those objects to configure them. The accessible fields of a JavaBean are called properties. They are accessible via public get/set methods. There need not be an actual field, just the get/set methods that simulate one. These are a completely separate mechanism.

Delphi Properties

Property has a third meaning, the Delphi sense. A property is a get/set method that masquerades as an ordinary instance or public static field to the clients of the class. See my Bali proposal for adding such properties to Java.

Network/Security Properties

There is another set of properties you can access with java.security.Security. getProperty. Beware, unused properties will return null, not the default. Mainly they are used to configure proxies.

Important Networking Properties
Property Notes
networkaddress.cache.ttl time in seconds to cache a successful DNS (Domain Name Service) lookup. Oddly the default is -1 to default forever. So if the DNS changes, Java will not never notice until you shutdown and restart.
networkaddress.cache.negative.ttl time in seconds to cache a unsuccessful DNS lookup. 0=never cache, -1=forever, 10=default.
http.proxyHost http proxy
http.proxyPort http proxy
ftp.proxyHost ftp proxy
ftp.proxyPort ftp proxy
java.net.preferIPv4Stack=true Gets rid of sporadic UnsupportedHostExceptions in Java 1.8

Learning More

Oracle’s Javadoc on System Properties : available:
Oracle’s Javadoc on Properties class : available:
Oracle’s Javadoc on getProperties class : available:
Oracle’s Javadoc on Properties.storeToXML : available:

Bat/Btm File Properties

This information is tentative. I have been doing some experiments, and here is my best understanding so far: When a bat/btm (Take Command) file is running, you can right click the bar at the top. Then you can configure the properties which includes options, Font, Layout and Colors. You might think Windows stores the properties for each bat file in some secret place, such as the registry, but it does not. It stores only one set of properties, common to all bat/btm files in the registry at Computer\HKEY_CURRENT_USER\Console. If you change the properties, you will change them for all bat/btm files.

If you right click on a *.lnk shortcut, you can change the properties, but these are completely different from the ones you get when you click on a running bat/btm file. For example, they let you change the icon, which often does not take until a reboot.

When a *.lnk shortcut is running, you can right click the bar at the top. Then you can configure the properties which includes options, Font, Layout and Colors. These will be private to just that shortcut. They are stored in the *.lnk file.

Even if you invoke a bat/btm file directly via the bat/btm file, not the shortcut, or if you invoke it via the task scheduler, Windows is clever enough to find the corresponding shortcut on the desktop. How it does that I don’t know.

I think it is necessary to have the same palette defined for all your bat/btm properties, otherwise when you select a colour, the screen will use often use a colour from some other property/shortcut, but at the same offset in the array of possible choices. Even when you do that, often colours mysteriously change all by themselves. It is very frustrating. I think the whole scheme should be redone to give every bat/btm file its own properties, completely independent of any others and to let you choose colours directly without using a predefined palette. Perhaps my new understanding that only *.lnk not bat/btm files have properties may help me stay out of trouble.

I suspect the basic rule of thumb is, never modify properties unless you have first created a matching shortcut. Otherwise you will modify the default settings for all bat files without shortcuts. However, it does not seem to matter if you launch via the shortcut or launch the bat/btm file directly.


This page is posted
on the web at:

http://mindprod.com/jgloss/properties.html

Optional Replicator mirror
of mindprod.com
on local hard disk J:

J:\mindprod\jgloss\properties.html
Canadian Mind Products
Please the feedback from other visitors, or your own feedback about the site.
Contact Roedy. Please feel free to link to this page without explicit permission.

IP:[65.110.21.43]
Your face IP:[44.204.164.147]
You are visitor number