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 …
F
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 ??
T
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!
F
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
F
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
F
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 +++