e aew galera blz , olha só , eu to com um pequeno probleminha aqui , preciso pegar o caminho de um diretório para gravar um arquivo dentro , só que eu preciso pegar esse caminho da seguinte maneira , por exemplo o diretório
C:\Arquivos de Programas…
precisoquesejanoformato
C:\arquiv~1…
to usando o seguinte código
private File caminho(){
File filename;
JFileChooser arquivo = new JFileChooser();
arquivo.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
int result = arquivo.showOpenDialog( null );
if ( result == JFileChooser.CANCEL_OPTION ) //Se clique do mouse da caixa de arquivos
return null; //n�o foi em cancel ele carrega o arquivo
else {
filename = arquivo.getSelectedFile();
tcaminho.setText(filename.toString());
return filename;
}
}
Converter um nome normal em um nome curto requer uma API do Windows (JNI e C).
Se você tiver paciência de chamar o cmd.exe, vocë pode tentar algo como listar o diretório com "dir /x" e pegar os nomes. Exemplo:
aff mais isso daria muito trampo … mais valew pela dica …
fcoury
Amigo,
Não sei o quanto você precisa disso, mas caso seja extremamente necessário, seria interessante você utilizar uma library java de Interop de ActiveX chamada Jacob:
Baixe o binário desta biblioteca, coloca o .jar no classpath do seu projeto e o .dll em algum lugar onde o Java enxergue (pode ser C:\Windows por exemplo). Daí utilize o código abaixo:
packagecom.testing.activex;importcom.jacob.activeX.ActiveXComponent;importcom.jacob.com.Dispatch;publicclassActiveXTesting{publicstaticvoidmain(String[]args){System.out.println("Nome 8.3 para x.java: "+getShortFileName("c:/temp/x.java"));}publicstaticStringgetShortFileName(Stringfile){ActiveXComponentfso=newActiveXComponent("Scripting.FileSystemObject");ObjectfsoObject=fso.getObject();ObjectfileObject=Dispatch.call(fsoObject,"GetFile","c:/temp/x.java").toDispatch();returnDispatch.get(fileObject,"ShortName").toString();}}
Funciona perfeito aqui prá mim.
Abraços!
D
Diego_Pangone
fcoury blz
nossa mew é de extrema importancia pra mim poder fazer isso só que
o link que vc postou ai não está sendo acessível , sera que tem outro
jeito de eu pegar esse .jar ??
tRuNkSnEt
Não é muito trabalhoso assim não ..... veja se é isso! De uma olhada no codigo e aproveite segundo sua necessidade.
P.S: Depedendo do tamanho do buffer o codigo vai precisar de melhorias. Rsrsrsr
Depois salva ele como teste.vbs em algum lugar. Depois, clica duas vezes nesse arquivo. Talvez o Windows dê um aviso de segurança, mas pode deixar rodar. Veja se ele abre um pop-up com o nome correto do arquivo (ou diretório).
Valeu!
fcoury
diego,
Esse código que eu postei só está funcionando para nomes de arquivo, não de diretório. Espera um pouco que vou tentar fazer funcionar com diretórios e te aviso se é possível.
Abraços,
D
Diego_Pangone
fcoury
olha só , eu fiz o script q vc falou e deu um erro de arquivo não
encontrado …
e quanto a DLL eu copiei ela , para o diretório C:\WINDOWS\SYSTEM32
fcoury
Achei cara, prá fazer com diretório, troca o “GetFile” por “GetFolder”, veja:
packagecom.testing.activex;importcom.jacob.activeX.ActiveXComponent;importcom.jacob.com.Dispatch;publicclassActiveXTesting{publicstaticvoidmain(String[]args){System.out.println("Nome 8.3 para x.java: "+getShortFileName("c:/Program Files"));}publicstaticStringgetShortFileName(Stringfile){// creates the ActiveX componentActiveXComponentfso=newActiveXComponent("Scripting.FileSystemObject");// gets the ActiveX "handler"ObjectfsoObject=fso.getObject();// calls a method "GetFile" with the parameter passed on the "file" variable ObjectfileObject=Dispatch.call(fsoObject,"GetFolder",file).toDispatch();// gets the "ShortName" property of the resulting file objectreturnDispatch.get(fileObject,"ShortName").toString();}}
Desculpa os comentários em inglês, mas eu vou postar esse código no meu blog…
D
Diego_Pangone
então , pro meu caso eu precisaria somente para diretórios , e não para arquivos , c vc puder me dar essa grande ajuda eu ficarei grato
fcoury
diego,
Vc viu o que eu postei para funcionar para diretórios?
Abraços!
D
Diego_Pangone
nossa cara valew mesmo heim , deu certinho aqui eu estava atraz disso
á dias , muito obrigado nem como te agradecer…
há esse código que vc passou da certinho mais ele pega apenas o caminho curto da primeira pasta , as outras ele não pega por exemplo
C:\Arquivos De Programas\Arquivos Comuns
ele só me retorna ARQUIV~1 será que tem uma maneira de pegar todo
o diretório como caminho curto???
bom mais c não tiver tudo bem , isso eu dou um jeito aqui , vc ja me ajudou d +++