Achar o diretório raiz do SO

Olá a todos,

pessoal, é o seguinte: Estou tentando fazer um programa que precise que encontre uma pasta no sistema operacional, esta pasta eu ja crio anteriormente, mas como não quero amarrar a aplicação de jeito nenhum, pensei em escrever um método que fizesse uma busca pelos nós primários atrás dessa pasta específica, por exemplo:

C:\Teste\NovaPasta
G:\Teste\NovaPasta
F:\Teste\NovaPasta

E por ai vai… Seria ótimo desse jeito, o problema é que quando o programa tenta testar a pasta nos drives de CD ou disquete, então aparece aquela tela com 3 botões: “Tentar Novamente”, "Continuar"e “Cancelar”. E lógico que isso é péssimo para a boa execução do programa, eu tentei colocar um teste antes chamando a função que testa se o diretório tem permissão de escrita ( drives de CD não tem essa permissão, só de leitura ) só que não funcionou, coloquei a função que escrevi ( o nome da pasta vem como parâmetro ):

private File retornaDiretorio( String diretorio )
{

                File dir = null;
		File[] root;

		try
		{
			//Retorna um array de nós primários do SO 
			root = File.listRoots();

			for ( int i = 0; i < root.length; i++ )
			{
				/*
				 * Esse teste é para o drive de disquete, pois quando                    ele tenta acessar  o drive de disquete e que não existe nenhum disquete la dentro, então ele pede para: "Continuar", "Tentar Novamente" ou  "Cancelar" ( no Windows é assim ). Alem de ser altamente inviável para o usuário que apareça essa mensagem, caso o mesmo clique em "Cancelar" então o programa é abortado, o que não é nem um pouco conveniente!
				 * Esse teste abaixo elimina isso ( pelo menos no Windows )! 
				 * */
				if ( root[ i ].toString().equalsIgnoreCase( "A:\\" ) )
				{					
					continue;
				}
                               //Testa se tem permissão de escrita

				if ( root[ i ].canWrite() )
				{
					dir = new File ( root[ i ] + diretorio );

					if ( dir.exists() )
					{						
						return dir;
					}
					else
					{
						dir = null;
					}
				}

			}

		}
		catch ( Exception e )
		{
			mostraMensagem ( true , "Mensagem Default" , e.toString() );
		}

		return dir;
	}

Estou fazendo algo errado? Se alguêm já tenha passado por isso e tenha uma solução melhor acharia ótimo se postasse aqui!

Desde já agradeço a todos pela atenção![/code]

Tente validar assim para pegar somente partições e unidades de rede

if ( root[ i ].isDirectory() )
{
continue;
}

Mas se voce q ta criando essas pastas e não existe alguma particularidade no seu programa que te impeça de padronizar o local onde essas pastas são criadas, tente crialas num diretorio padrão tipo no %userprofile% por exemplo.

Eu fiz mais ou menos isso, eu usei o getProperty() e peguei o diretorio dos documentos do usuário, ex:

String diretorio = System.getProperty( “user.home” );

Retorna algo do tipo:
“C:\Documents and Settings\Daniel”

E depois dei um substring para pegar somente a letra do drive:

diretorio = diretorio.substring( 0 , 3 );

Claro que isso eu fiz testando se o SO é Windows, caso contrário eu faço mesmo o loop com o for…

Muito obrigado, vou tambem testar usando o isDirectory(), valeu!!! :cool: