Como faço para desmembrar nomes de arquivos do Windows em Java?
-
22-09-2019 - |
Pergunta
De Java, estou extraindo um executável para um local especificado usando o arquivo.createTeTempFile (). Quando tento executar meu executável, meu programa está pendurado quando tenta ler a primeira linha de saída.
Descobri que, se tentar executar o mesmo executável extraído de outro programa, ele funciona se eu especificar o diretório como C: Documentos e Configurações Nome de Userr Settings Local Temp Prog.exe. Mas se eu especificar o diretório como C: docume ~ 1 UserNa ~ 1 Locais ~ 1 Temp Prog.exe eu pego o HANG.
Existe uma maneira de desmembrar o nome do tilde no meu programa para que eu possa especificar um nome de diretório que funcionará?
(E como eu sempre gosto de abordar os problemas de design de idiomas e API, há alguma razão para que o java file.createTempfile () e java.io.tmpdir tenham que avaliar os nomes de arquivos mutilados?)
Solução
Você pode usar getCanonicalPath()
Para obter o caminho expandido. Por exemplo:
try
{
File file = File.createTempFile("abc", null);
System.out.println(file.getPath());
System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}
... produz ...
C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp
Eu testei isso no XP, mas suponho que funcionaria da mesma forma em outros sistemas operacionais do Windows.
Veja a resposta de @Raviaw para sua segunda pergunta.
Outras dicas
Uau, eu nunca vi isso. O fato é que a variável ambiental % temp % retorna um nome mutilado (isto é do meu computador):
TEMP=C:\DOCUME~1\raviw\LOCALS~1\Temp TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
Supondo que uma VM Java recém -criada use a variável de ambiente para obter o local da pasta temporária, não é culpa da VM que os diretórios estejam vindo mutilados.
E mesmo se você tentar usar System.getenv () Para obter a pasta temporária, você ainda terá o mesmo problema.
Eu me certificaria de que:
- O problema não é causado pelo fato de você ter um diretório chamado "prog.exe" (com base em sua pergunta, estou assumindo isso);
- Se o arquivo for "prog.exe", se não estiver em uso por nenhum outro programa (um antivírus, talvez);
- Verificando se o seu computador for sã (esse seria um bug muito crítico para qualquer aplicativo que não seja um aplicativo da Web e que precisa de arquivos temporários).