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:
- Cross-platform compatibility - Works on Windows, macOS, Linux, and Unix
- System information - Easy access to OS and Java runtime information
- Platform detection - Comprehensive OS and version detection
- File system utilities - Platform-appropriate file separators and paths
- Environment awareness - User and system environment information
Start incorporating SystemUtils into your projects and see how it simplifies your system-related code!
Resources
Written by Purusothaman Ramanujam
← Back to blog