Olá, preciso transformar um nome de arquivo longo do windows num nome no formato 8.3, para usá-lo dentro de um programa java.
Tem algum método java ou mesmo chamada de sistema para fazer isso?
Valeu
Nomes de arquivo do windows
6 Respostas
Até onde eu conheço a API do java , não tem benhum metodo que faça isso.
Tem que fazer na mão mesmo…
- Você pode usar a API do Windows “GetShortPathName”. Isso quer dizer que precisa usar JNI ou chamar um programa em C que lhe forneça essa informação.
- Se seu problema é que você quer chamar algum programa (com Runtime.exec, por exemplo) e o(s) nome(s) de arquivo não pode ter espaços, ponha o(s) nome(s) do arquivo entre aspas, que os problemas de espaços costumam se resolver dessa maneira.
VAleu pela dica.
De fato, o meu problema era executar um comando com o Runtime.exec. Sua dica resolveu o problema do nome dos arquivos que são passados como parâmetro para o meu executável, mas não o do nome do executável em si. Ele está na variável path do windows, mas o meu programa parece não enxergar isso. Então tentei passar o caminho completo, mas aí eu caio de novo no problema dos nomes longos, com o agravante de que as aspas não resolvem nesse caso…
Então eu agradeceria muitíssimo se alguém me dissesse como fazer para o meu programa java enxergar o path do windows.
Amigo, a dica das aspas é exatamente a mesma para parâmetros e nomes de programas. Exemplo:
“C:\Arquivos de Programas\Java\JRE1.6.0_01\JRE\bin\java.exe”
Mas não está funcionando. Veja esse teste:
Código:
String deb = "\"C:\Arquivos de programas\Text-NSP-1.03\bin\count.pl\"";
logger.debug("COUNT SOZINHO: " + deb);
Runtime.getRuntime().exec(deb);
Resultado no arquivo de log:
COUNT SOZINHO: "C:\Arquivos de programas\Text-NSP-1.03\bin\count.pl"
Mensagem de erro:
Cannot run program: ""C:\Arquivos":CreateProcess error=193, %1 não é um aplicativo Win32 válido.
Ou seja, ele faz uma confusão e não reconhece o programa…
(copiei e colei a string resultante no DOS e roda…)
Quando você digita o arquivo ".pl" no Command Prompt (DOS como você chama), o Windows tenta achar o programa que sabe lidar com arquivos com extensão ".pl", que no seu caso seria o Perl, que provavelmente está instalado em C:\Perl\bin\perl.exe. Na minha máquina, por exemplo, digitei os seguintes comandos e o Windows me informou isto:
D:\>assoc .pl
.pl=Perl
D:\>ftype Perl
Perl="C:\Perl\bin\perl.exe" "%1" %*
Então o Command Prompt na verdade tenta executar:
C:\perl\bin\perl "C:\Arquivos de programas\Text-NSP-1.03\bin\count.pl"
Uma das formas de você resolver esse problema é passar o nome do programa (que não é .PL - programas no Windows só podem terminar por .EXE ou .COM), e sim PERL.EXE.