Informações sobre o ambiente

3 respostas
guariba

Como eu consigo as seguintes informações a cerca do ambiente em que o programa em Java está sendo executado:

. Sistema operacional
. Variáveis de ambiente
. Memória disponível
. Processador

3 Respostas

Rafael_Steil

Use System.getProperty(“nome.da.propriedade”) para pegar o valor que voce quer. Voce pode ver a lista completa de propriedades na API do J2SE, método “getProperties()” da classe System.

Rafael

Elvis.The.Pelvis

Certo, mas você ainda não consegue acessar as variáveis de ambiente. Alguém sabe como fazê-lo.

Rafael_Steil

Nao existe uma maneira pegar as variaveis de ambiente em Java, pois isso nao eh portavel. Se acessar PATH for realmente necessario, entao rode o programa Java passando a variavel pra ele e use System.getProperty() para pegar o valor. Por exemplo

Unix:

$ java -DmeuPath=$PATH MeuPrograma

Windows:

java -DmeuPath=%PATH% meuPrograma

Uma outra saida eh fazer uma classe wrapper para manipular isso. Eis um exemplo:

// EnvironmentVars.java
import java.io.*;
import java.util.*;

public class EnvironmentVars
{
	private Properties vars;
	private static EnvironmentVars ev;
	
	// Singleton
	private EnvironmentVars()
	{
		vars = new Properties();
		
		// Verifica em qual SO estamos rodando
		String SO = System.getProperty("os.name").toLowerCase();
		String command;
		Process pid = null;
		
		// Se nao for windows, leva em consideracao 
		// que é Unix ( precisa verificar melhor )
		if (SO.indexOf("win") > -1)
			command = "cmd /C set";
		else
			command = "env";
			
		// Pega as variaveis
		try {
			pid = Runtime.getRuntime().exec(command);
			BufferedReader reader = new BufferedReader(new InputStreamReader(pid.getInputStream()));
		
			String linha;
			String valores[] = new String[2];
			while ((linha = reader.readLine()) != null) {
				valores = linha.split("=", 2);
			
				vars.setProperty(valores[0], valores[1]);
			}
						
		
			reader.close();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
		try {
			pid.waitFor();
		}
		catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public static EnvironmentVars getInstance()
	{
		if (ev == null)
			ev = new EnvironmentVars();
	
		return ev;
	}
	
	public String getVar(String varName)
	{		
		return vars.getProperty(varName);
	}
}
// EnvironmentTest.java
public class EnvironmentTest
{
	public static void main(String args[])
	{
		System.out.println(EnvironmentVars.getInstance().getVar("PATH"));
		System.out.println(EnvironmentVars.getInstance().getVar("CLASSPATH"));
	}
}

Fiz este codigo apenas como demonstracao, eh necessario fazer umas checagens melhores sobre em que ambiente esta rodando.

Rafael

Criado 20 de dezembro de 2002
Ultima resposta 21 de dez. de 2002
Respostas 3
Participantes 3