Everything Java

← Back to blog

Published on Sun Jun 15 2025 10:00:00 GMT+0000 (Coordinated Universal Time) by Purusothaman Ramanujam

System Utilities in Apache Commons Lang

Introduction

Working with system information, detecting operating systems, and handling platform-specific code are common requirements in Java applications. Apache Commons Lang’s SystemUtils provides a comprehensive set of utilities that make system operations more convenient, cross-platform, and robust.

In this comprehensive guide, you’ll learn how to use SystemUtils effectively with detailed examples and real-world use cases.

Adding Apache Commons Lang to Your Project

Maven Dependency

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.13.0</version>
</dependency>

Gradle Dependency

implementation 'org.apache.commons:commons-lang3:3.13.0'

Basic System Information

Operating System Detection

import org.apache.commons.lang3.SystemUtils;
public class SystemUtilsBasics {
public static void main(String[] args) {
// Operating system detection
System.out.println("OS Name: " + SystemUtils.OS_NAME);
System.out.println("OS Version: " + SystemUtils.OS_VERSION);
System.out.println("OS Architecture: " + SystemUtils.OS_ARCH);
// Platform-specific boolean flags
System.out.println("Is Windows: " + SystemUtils.IS_OS_WINDOWS);
System.out.println("Is Linux: " + SystemUtils.IS_OS_LINUX);
System.out.println("Is macOS: " + SystemUtils.IS_OS_MAC);
System.out.println("Is Unix: " + SystemUtils.IS_OS_UNIX);
// More specific OS detection
System.out.println("Is Windows 10: " + SystemUtils.IS_OS_WINDOWS_10);
System.out.println("Is Windows 11: " + SystemUtils.IS_OS_WINDOWS_11);
System.out.println("Is macOS X: " + SystemUtils.IS_OS_MAC_OSX);
System.out.println("Is macOS X Cheetah: " + SystemUtils.IS_OS_MAC_OSX_CHEETAH);
}
}

Java Runtime Information

public class JavaRuntimeInfo {
public static void main(String[] args) {
// Java version information
System.out.println("Java Version: " + SystemUtils.JAVA_VERSION);
System.out.println("Java Vendor: " + SystemUtils.JAVA_VENDOR);
System.out.println("Java Vendor URL: " + SystemUtils.JAVA_VENDOR_URL);
// Java home and class path
System.out.println("Java Home: " + SystemUtils.JAVA_HOME);
System.out.println("Java Class Path: " + SystemUtils.JAVA_CLASS_PATH);
System.out.println("Java Class Version: " + SystemUtils.JAVA_CLASS_VERSION);
// Java specification
System.out.println("Java Specification Name: " + SystemUtils.JAVA_SPECIFICATION_NAME);
System.out.println("Java Specification Vendor: " + SystemUtils.JAVA_SPECIFICATION_VENDOR);
System.out.println("Java Specification Version: " + SystemUtils.JAVA_SPECIFICATION_VERSION);
// Java runtime
System.out.println("Java Runtime Name: " + SystemUtils.JAVA_RUNTIME_NAME);
System.out.println("Java Runtime Vendor: " + SystemUtils.JAVA_RUNTIME_VENDOR);
System.out.println("Java Runtime Version: " + SystemUtils.JAVA_RUNTIME_VERSION);
}
}

Advanced System Detection

Detailed OS Information

public class DetailedOSInfo {
public static void main(String[] args) {
// File separator and path separator
System.out.println("File Separator: " + SystemUtils.FILE_SEPARATOR);
System.out.println("Path Separator: " + SystemUtils.PATH_SEPARATOR);
System.out.println("Line Separator: " + SystemUtils.LINE_SEPARATOR);
// User information
System.out.println("User Name: " + SystemUtils.USER_NAME);
System.out.println("User Home: " + SystemUtils.USER_HOME);
System.out.println("User Directory: " + SystemUtils.USER_DIR);
System.out.println("User Language: " + SystemUtils.USER_LANGUAGE);
System.out.println("User Country: " + SystemUtils.USER_COUNTRY);
System.out.println("User Timezone: " + SystemUtils.USER_TIMEZONE);
// System properties
System.out.println("System Name: " + SystemUtils.USER_NAME);
System.out.println("System Architecture: " + SystemUtils.OS_ARCH);
System.out.println("System Model: " + SystemUtils.OS_NAME + " " + SystemUtils.OS_VERSION);
}
}

Platform-Specific Detection

public class PlatformDetection {
public static void main(String[] args) {
// Windows variants
System.out.println("Is Windows 95: " + SystemUtils.IS_OS_WINDOWS_95);
System.out.println("Is Windows 98: " + SystemUtils.IS_OS_WINDOWS_98);
System.out.println("Is Windows ME: " + SystemUtils.IS_OS_WINDOWS_ME);
System.out.println("Is Windows NT: " + SystemUtils.IS_OS_WINDOWS_NT);
System.out.println("Is Windows 2000: " + SystemUtils.IS_OS_WINDOWS_2000);
System.out.println("Is Windows XP: " + SystemUtils.IS_OS_WINDOWS_XP);
System.out.println("Is Windows Vista: " + SystemUtils.IS_OS_WINDOWS_VISTA);
System.out.println("Is Windows 7: " + SystemUtils.IS_OS_WINDOWS_7);
System.out.println("Is Windows 8: " + SystemUtils.IS_OS_WINDOWS_8);
System.out.println("Is Windows 10: " + SystemUtils.IS_OS_WINDOWS_10);
System.out.println("Is Windows 11: " + SystemUtils.IS_OS_WINDOWS_11);
// Unix variants
System.out.println("Is Unix: " + SystemUtils.IS_OS_UNIX);
System.out.println("Is Linux: " + SystemUtils.IS_OS_LINUX);
System.out.println("Is AIX: " + SystemUtils.IS_OS_AIX);
System.out.println("Is HP-UX: " + SystemUtils.IS_OS_HP_UX);
System.out.println("Is Irix: " + SystemUtils.IS_OS_IRIX);
System.out.println("Is Solaris: " + SystemUtils.IS_OS_SOLARIS);
System.out.println("Is SunOS: " + SystemUtils.IS_OS_SUN_OS);
// macOS variants
System.out.println("Is macOS: " + SystemUtils.IS_OS_MAC);
System.out.println("Is macOS X: " + SystemUtils.IS_OS_MAC_OSX);
System.out.println("Is macOS X Cheetah: " + SystemUtils.IS_OS_MAC_OSX_CHEETAH);
System.out.println("Is macOS X Puma: " + SystemUtils.IS_OS_MAC_OSX_PUMA);
System.out.println("Is macOS X Jaguar: " + SystemUtils.IS_OS_MAC_OSX_JAGUAR);
System.out.println("Is macOS X Panther: " + SystemUtils.IS_OS_MAC_OSX_PANTHER);
System.out.println("Is macOS X Tiger: " + SystemUtils.IS_OS_MAC_OSX_TIGER);
System.out.println("Is macOS X Leopard: " + SystemUtils.IS_OS_MAC_OSX_LEOPARD);
System.out.println("Is macOS X Snow Leopard: " + SystemUtils.IS_OS_MAC_OSX_SNOW_LEOPARD);
System.out.println("Is macOS X Lion: " + SystemUtils.IS_OS_MAC_OSX_LION);
System.out.println("Is macOS X Mountain Lion: " + SystemUtils.IS_OS_MAC_OSX_MOUNTAIN_LION);
System.out.println("Is macOS X Mavericks: " + SystemUtils.IS_OS_MAC_OSX_MAVERICKS);
System.out.println("Is macOS X Yosemite: " + SystemUtils.IS_OS_MAC_OSX_YOSEMITE);
System.out.println("Is macOS X El Capitan: " + SystemUtils.IS_OS_MAC_OSX_EL_CAPITAN);
System.out.println("Is macOS X Sierra: " + SystemUtils.IS_OS_MAC_OSX_SIERRA);
System.out.println("Is macOS X High Sierra: " + SystemUtils.IS_OS_MAC_OSX_HIGH_SIERRA);
System.out.println("Is macOS X Mojave: " + SystemUtils.IS_OS_MAC_OSX_MOJAVE);
System.out.println("Is macOS X Catalina: " + SystemUtils.IS_OS_MAC_OSX_CATALINA);
System.out.println("Is macOS X Big Sur: " + SystemUtils.IS_OS_MAC_OSX_BIG_SUR);
System.out.println("Is macOS X Monterey: " + SystemUtils.IS_OS_MAC_OSX_MONTEREY);
System.out.println("Is macOS X Ventura: " + SystemUtils.IS_OS_MAC_OSX_VENTURA);
System.out.println("Is macOS X Sonoma: " + SystemUtils.IS_OS_MAC_OSX_SONOMA);
}
}

Real-World Examples

Cross-Platform File Operations

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CrossPlatformFileOps {
public static String getConfigPath() {
String configDir;
if (SystemUtils.IS_OS_WINDOWS) {
configDir = SystemUtils.USER_HOME + "\\AppData\\Local\\MyApp\\config";
} else if (SystemUtils.IS_OS_MAC) {
configDir = SystemUtils.USER_HOME + "/Library/Application Support/MyApp/config";
} else {
// Linux and other Unix systems
configDir = SystemUtils.USER_HOME + "/.config/myapp";
}
return configDir;
}
public static String getLogPath() {
String logDir;
if (SystemUtils.IS_OS_WINDOWS) {
logDir = SystemUtils.USER_HOME + "\\AppData\\Local\\MyApp\\logs";
} else if (SystemUtils.IS_OS_MAC) {
logDir = SystemUtils.USER_HOME + "/Library/Logs/MyApp";
} else {
// Linux and other Unix systems
logDir = SystemUtils.USER_HOME + "/.local/share/myapp/logs";
}
return logDir;
}
public static String getTempPath() {
return SystemUtils.JAVA_IO_TMPDIR;
}
public static void main(String[] args) {
System.out.println("Config Path: " + getConfigPath());
System.out.println("Log Path: " + getLogPath());
System.out.println("Temp Path: " + getTempPath());
// Create directories if they don't exist
createDirectoryIfNotExists(getConfigPath());
createDirectoryIfNotExists(getLogPath());
}
private static void createDirectoryIfNotExists(String path) {
File dir = new File(path);
if (!dir.exists()) {
boolean created = dir.mkdirs();
System.out.println("Created directory " + path + ": " + created);
}
}
}

Platform-Specific Configuration

import java.util.HashMap;
import java.util.Map;
public class PlatformSpecificConfig {
public static class PlatformConfig {
private String fileSeparator;
private String pathSeparator;
private String lineSeparator;
private String tempDir;
private String userHome;
private String javaVersion;
private String osName;
public PlatformConfig() {
this.fileSeparator = SystemUtils.FILE_SEPARATOR;
this.pathSeparator = SystemUtils.PATH_SEPARATOR;
this.lineSeparator = SystemUtils.LINE_SEPARATOR;
this.tempDir = SystemUtils.JAVA_IO_TMPDIR;
this.userHome = SystemUtils.USER_HOME;
this.javaVersion = SystemUtils.JAVA_VERSION;
this.osName = SystemUtils.OS_NAME;
}
@Override
public String toString() {
return String.format("PlatformConfig{fileSep='%s', pathSep='%s', lineSep='%s', tempDir='%s', userHome='%s', javaVersion='%s', osName='%s'}",
fileSeparator, pathSeparator, lineSeparator, tempDir, userHome, javaVersion, osName);
}
}
public static Map<String, String> getPlatformSpecificSettings() {
Map<String, String> settings = new HashMap<>();
// Common settings
settings.put("java.version", SystemUtils.JAVA_VERSION);
settings.put("java.vendor", SystemUtils.JAVA_VENDOR);
settings.put("os.name", SystemUtils.OS_NAME);
settings.put("os.version", SystemUtils.OS_VERSION);
settings.put("os.arch", SystemUtils.OS_ARCH);
// Platform-specific settings
if (SystemUtils.IS_OS_WINDOWS) {
settings.put("platform", "windows");
settings.put("config.dir", SystemUtils.USER_HOME + "\\AppData\\Local\\MyApp");
settings.put("log.dir", SystemUtils.USER_HOME + "\\AppData\\Local\\MyApp\\logs");
} else if (SystemUtils.IS_OS_MAC) {
settings.put("platform", "macos");
settings.put("config.dir", SystemUtils.USER_HOME + "/Library/Application Support/MyApp");
settings.put("log.dir", SystemUtils.USER_HOME + "/Library/Logs/MyApp");
} else if (SystemUtils.IS_OS_LINUX) {
settings.put("platform", "linux");
settings.put("config.dir", SystemUtils.USER_HOME + "/.config/myapp");
settings.put("log.dir", SystemUtils.USER_HOME + "/.local/share/myapp/logs");
} else {
settings.put("platform", "unknown");
settings.put("config.dir", SystemUtils.USER_HOME + "/.myapp");
settings.put("log.dir", SystemUtils.USER_HOME + "/.myapp/logs");
}
return settings;
}
public static void main(String[] args) {
PlatformConfig config = new PlatformConfig();
System.out.println("Platform Config: " + config);
Map<String, String> settings = getPlatformSpecificSettings();
System.out.println("Platform Settings:");
settings.forEach((key, value) -> System.out.println(" " + key + " = " + value));
}
}

System Information Logger

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class SystemInfoLogger {
public static void logSystemInfo(String logFile) {
try (PrintWriter writer = new PrintWriter(new FileWriter(logFile, true))) {
LocalDateTime now = LocalDateTime.now();
String timestamp = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
writer.println("=== System Information Log - " + timestamp + " ===");
writer.println("Operating System: " + SystemUtils.OS_NAME + " " + SystemUtils.OS_VERSION);
writer.println("Architecture: " + SystemUtils.OS_ARCH);
writer.println("Java Version: " + SystemUtils.JAVA_VERSION);
writer.println("Java Vendor: " + SystemUtils.JAVA_VENDOR);
writer.println("Java Home: " + SystemUtils.JAVA_HOME);
writer.println("User Name: " + SystemUtils.USER_NAME);
writer.println("User Home: " + SystemUtils.USER_HOME);
writer.println("User Directory: " + SystemUtils.USER_DIR);
writer.println("Temp Directory: " + SystemUtils.JAVA_IO_TMPDIR);
writer.println("File Separator: " + SystemUtils.FILE_SEPARATOR);
writer.println("Path Separator: " + SystemUtils.PATH_SEPARATOR);
writer.println("Line Separator: " + SystemUtils.LINE_SEPARATOR);
// Platform-specific information
writer.println("Is Windows: " + SystemUtils.IS_OS_WINDOWS);
writer.println("Is Linux: " + SystemUtils.IS_OS_LINUX);
writer.println("Is macOS: " + SystemUtils.IS_OS_MAC);
writer.println("Is Unix: " + SystemUtils.IS_OS_UNIX);
writer.println("=== End System Information ===");
writer.println();
} catch (IOException e) {
System.err.println("Error writing system info log: " + e.getMessage());
}
}
public static void main(String[] args) {
String logFile = SystemUtils.USER_HOME + SystemUtils.FILE_SEPARATOR + "system_info.log";
logSystemInfo(logFile);
System.out.println("System information logged to: " + logFile);
}
}

Environment Detection

public class EnvironmentDetection {
public static String detectEnvironment() {
if (SystemUtils.IS_OS_WINDOWS) {
return "Windows";
} else if (SystemUtils.IS_OS_MAC) {
return "macOS";
} else if (SystemUtils.IS_OS_LINUX) {
return "Linux";
} else if (SystemUtils.IS_OS_UNIX) {
return "Unix";
} else {
return "Unknown";
}
}
public static boolean isDevelopmentEnvironment() {
String userDir = SystemUtils.USER_DIR;
return userDir.contains("development") ||
userDir.contains("dev") ||
userDir.contains("workspace") ||
userDir.contains("projects");
}
public static boolean isProductionEnvironment() {
String userDir = SystemUtils.USER_DIR;
return userDir.contains("production") ||
userDir.contains("prod") ||
userDir.contains("live") ||
userDir.contains("deploy");
}
public static String getJavaVersionCategory() {
String version = SystemUtils.JAVA_VERSION;
if (version.startsWith("1.8")) {
return "Java 8";
} else if (version.startsWith("9") || version.startsWith("10") || version.startsWith("11")) {
return "Java 9-11";
} else if (version.startsWith("12") || version.startsWith("13") || version.startsWith("14") || version.startsWith("15")) {
return "Java 12-15";
} else if (version.startsWith("16") || version.startsWith("17") || version.startsWith("18") || version.startsWith("19")) {
return "Java 16-19";
} else if (version.startsWith("20") || version.startsWith("21") || version.startsWith("22")) {
return "Java 20+";
} else {
return "Unknown Java Version";
}
}
public static void main(String[] args) {
System.out.println("Environment: " + detectEnvironment());
System.out.println("Is Development: " + isDevelopmentEnvironment());
System.out.println("Is Production: " + isProductionEnvironment());
System.out.println("Java Version Category: " + getJavaVersionCategory());
}
}

Performance and Memory Information

System Resources

public class SystemResources {
public static void printSystemResources() {
Runtime runtime = Runtime.getRuntime();
System.out.println("=== System Resources ===");
System.out.println("Available Processors: " + runtime.availableProcessors());
System.out.println("Total Memory: " + formatBytes(runtime.totalMemory()));
System.out.println("Free Memory: " + formatBytes(runtime.freeMemory()));
System.out.println("Used Memory: " + formatBytes(runtime.totalMemory() - runtime.freeMemory()));
System.out.println("Max Memory: " + formatBytes(runtime.maxMemory()));
// Memory usage percentage
long usedMemory = runtime.totalMemory() - runtime.freeMemory();
double memoryUsagePercent = (double) usedMemory / runtime.totalMemory() * 100;
System.out.println("Memory Usage: " + String.format("%.2f", memoryUsagePercent) + "%");
// System properties
System.out.println("Java Version: " + SystemUtils.JAVA_VERSION);
System.out.println("OS Name: " + SystemUtils.OS_NAME);
System.out.println("OS Version: " + SystemUtils.OS_VERSION);
System.out.println("OS Architecture: " + SystemUtils.OS_ARCH);
}
private static String formatBytes(long bytes) {
if (bytes < 1024) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(1024));
String pre = "KMGTPE".charAt(exp-1) + "";
return String.format("%.1f %sB", bytes / Math.pow(1024, exp), pre);
}
public static void main(String[] args) {
printSystemResources();
}
}

Best Practices

Guidelines for System Utilities

public class BestPractices {
public static void main(String[] args) {
// 1. Always check for platform-specific behavior
String configPath = getPlatformSpecificConfigPath();
System.out.println("Config Path: " + configPath);
// 2. Use appropriate file separators
String filePath = buildPath("config", "app.properties");
System.out.println("File Path: " + filePath);
// 3. Handle different line separators
String multiLineText = buildMultiLineText();
System.out.println("Multi-line text: " + multiLineText);
// 4. Check Java version compatibility
boolean isCompatible = checkJavaVersionCompatibility();
System.out.println("Java Version Compatible: " + isCompatible);
}
public static String getPlatformSpecificConfigPath() {
if (SystemUtils.IS_OS_WINDOWS) {
return SystemUtils.USER_HOME + "\\AppData\\Local\\MyApp";
} else if (SystemUtils.IS_OS_MAC) {
return SystemUtils.USER_HOME + "/Library/Application Support/MyApp";
} else {
return SystemUtils.USER_HOME + "/.config/myapp";
}
}
public static String buildPath(String... parts) {
return String.join(SystemUtils.FILE_SEPARATOR, parts);
}
public static String buildMultiLineText() {
return "Line 1" + SystemUtils.LINE_SEPARATOR +
"Line 2" + SystemUtils.LINE_SEPARATOR +
"Line 3";
}
public static boolean checkJavaVersionCompatibility() {
String version = SystemUtils.JAVA_VERSION;
// Check if Java version is 8 or higher
return version.startsWith("1.8") ||
Integer.parseInt(version.split("\\.")[0]) >= 9;
}
}

Common Pitfalls

Avoiding Common Mistakes

public class CommonPitfalls {
public static void main(String[] args) {
// Pitfall 1: Hard-coding file separators
String badPath = "C:\\Users\\username\\config"; // Windows only
String goodPath = SystemUtils.USER_HOME + SystemUtils.FILE_SEPARATOR + "config";
System.out.println("Bad path (Windows only): " + badPath);
System.out.println("Good path (cross-platform): " + goodPath);
// Pitfall 2: Not checking OS before using OS-specific features
if (SystemUtils.IS_OS_WINDOWS) {
// Use Windows-specific code
System.out.println("Using Windows-specific features");
} else if (SystemUtils.IS_OS_MAC) {
// Use macOS-specific code
System.out.println("Using macOS-specific features");
} else {
// Use Unix/Linux-specific code
System.out.println("Using Unix/Linux-specific features");
}
// Pitfall 3: Not considering Java version compatibility
String javaVersion = SystemUtils.JAVA_VERSION;
if (javaVersion.startsWith("1.8")) {
System.out.println("Using Java 8 compatible code");
} else {
System.out.println("Using modern Java features");
}
// Pitfall 4: Not handling different line separators
String windowsText = "Line 1\r\nLine 2";
String unixText = "Line 1\nLine 2";
String macText = "Line 1\rLine 2";
System.out.println("Current line separator: " + SystemUtils.LINE_SEPARATOR);
System.out.println("Use SystemUtils.LINE_SEPARATOR for consistency");
}
}

Conclusion

SystemUtils from Apache Commons Lang provides a robust set of utilities that make system operations more convenient, cross-platform, and powerful. By understanding these methods and their proper usage, you can write cleaner, more maintainable code that works across different platforms.

The key benefits include:

Start incorporating SystemUtils into your projects and see how it simplifies your system-related code!

Resources

Written by Purusothaman Ramanujam

← Back to blog