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?)

Foi útil?

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).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top