File teste = new File("file:///localhost:C:\\Kooky\\SigGraf\\dados\\SIGRAF_STD.FDB");
if(teste.exists()){
System.out.println("== DEU CERTO == ");
} else {
System.out.println("== N A O D E U C E R T O");
}
Primeira coisa - se você sabe usar o Windows Explorer, a sintaxe para acessar um arquivo de servidor é
\servidor\share\diretorio\arquivo,
ou no Java,
“\\servidor\share\diretorio\arquivo”.
No seu caso, algum diretório do servidor deve ter sido compartilhado. Digamos que o compartilhamento tenha o nome “cookie” e tenha sido feito para o diretório c:\kooky\siggraf. Então a sintaxe seria:
Tenho na máquina local a pasta Teste compartilhada com um arquivo, fiz isso:
teste = new File("\\\\localhost\\Teste\\\\ARQUIVO_TESTE.TXT");
if (teste.exists()) {
System.out.println("== DEU CERTO == ");
} else {
System.out.println("== N A O D E U C E R T O");
}
[code]
File teste = new File(“file:///localhost:C:\Teste\ARQUIVO_TESTE.TXT”);
if (teste.exists()) {
System.out.println("== DEU CERTO == “);
} else {
System.out.println(”== N A O D E U C E R T O");
}
teste = new File("\\\\localhost\\Teste\\ARQUIVO_TESTE.TXT");
if (teste.exists()) {
System.out.println("== DEU CERTO == ");
} else {
System.out.println("== N A O D E U C E R T O");
}
try {
URI uri = new URI("file:///localhost:C:/Teste/ARQUIVO_TESTE.TXT");
teste = new File(uri);
if (teste.exists()) {
System.out.println("== DEU CERTO == ");
} else {
System.out.println("== N A O D E U C E R T O");
}
} catch (URISyntaxException ex) {
Logger.getLogger(CopiaSegurancaUI.class.getName()).log(Level.SEVERE, null, ex);
}
[/code]
Não pode usar localhost, porque esse não deve ser o nome de uma máquina na sua rede. É necessário usar o nome correto da máquina, ou então o IP numérico. Por exemplo:
Novo teste e continua dizendo que o arquivo não existe:
[code] String serverName = “127.0.0.1”;
String str = “file:///” + serverName + “:C:\Teste\ARQUIVO_TESTE.TXT”;
File teste = new File(str);
if (!teste.exists()) {
System.out.println(str + " NÃO EXISTE ");
}
str = “///” + serverName + “//C:/Teste/ARQUIVO_TESTE.TXT”;
teste = new File(str);
if (!teste.exists()) {
System.out.println(str + " NÃO EXISTE ");
}
serverName = "192.168.1.102";
str = "file:///" + serverName + ":C:\\Teste\\ARQUIVO_TESTE.TXT";
teste = new File(str);
if (!teste.exists()) {
System.out.println(str + " NÃO EXISTE ");
}
str = "///" + serverName + "//C:/Teste/ARQUIVO_TESTE.TXT";
teste = new File(str);
if (!teste.exists()) {
System.out.println(str + " NÃO EXISTE ");
}[/code]
Resultado:
[quote]file:///127.0.0.1:C:\Teste\ARQUIVO_TESTE.TXT NÃO EXISTE
///127.0.0.1//C:/Teste/ARQUIVO_TESTE.TXT NÃO EXISTE
file:///192.168.1.102:C:\Teste\ARQUIVO_TESTE.TXT NÃO EXISTE
///192.168.1.102//C:/Teste/ARQUIVO_TESTE.TXT NÃO EXISTE
[/quote]
Você nunca mexeu com Windows? Você não pode acessar o drive C: diretamente. Um diretório do Windows tem de estar shareado.
(OK, ok, normalmente o drive C: do Windows é shareado como “C$”, mas o usuário que precisa acessar esse share tem de ter direitos administrativos nessa máquina Windows, portanto não é aconselhável usar o C$ em condições normais).
Se você estiver em uma máquina Linux ou Unix, aí a história é outra. Você tem de montar (mount) esse tal diretório shareado do Windows para um diretório de sua máquina Linux.
Mas você nunca pode pôr esse “:” no meio do nome do arquivo.
String serverName = "127.0.0.1";
serverName = "192.168.1.102";
String str = "file:///" + serverName + ":C:\\Teste\\ARQUIVO_TESTE.TXT";
str = "///" + serverName + "//Teste/ARQUIVO_TESTE.TXT";
File teste = new File(str);
if (!teste.exists()) {
System.out.println(str + " NÃO EXISTE ");
} else {
System.out.println("Ok - "+str+" EXISTE");
}Agora a pergunta é: uma vez que minha aplicação roda com um certificado de segurança e tem acesso a máquina e a rede (criar arquivos, excluir arquivos, enviar por email, receber, enviar por FTP, receber por FTP), não teria como eu acessar esse diretório sem a necessidade de ele estar compartilhado?
uma duvida…
usando o java.nio eu consigo copiar arquivos pela rede (uma pasta compartilhada para todos) com a seguinte função:
[code]public static boolean copiarArquivo(String origem, String destino){
try {
// Create channel on the source
FileChannel srcChannel = new FileInputStream(origem).getChannel();
// Create channel on the destination
FileChannel dstChannel = new FileOutputStream(destino).getChannel();
// Copy file contents from source to destination
dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
// Close the channels
srcChannel.close();
dstChannel.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}[/code]
com um caminho tipo: “\10.1.1.9\informatica”
mas e se a pasta precisar de autenticação ou um usuario diferente do meu (logado)?
tipo: num computador em um dominio e eu consigo acessar uma pasta compartilhada pelo explorer “logando” nele com um usuário e senha.
esse procedimento poderia ser feito num programa em tempo de execução??
acabei de fazer um teste enquanto postava e retornou o seguinte:
java.io.FileNotFoundException: \10.1.1.9\informatica (Falha de logon: nome de usuário desconhecido ou senha incorreta)
tem como passar o usuario e senha na “url” do caminho? como num ftp?
Achou uma forma mais “elegente” de autenticar na rede? Via esse shell funciona, mas nao deve ser compativel com servidores que não sejam windows correto?..
Process p = Runtime.getRuntime().exec(cmdLine);
try {
p.waitFor();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} [/code]
desculpe pessoal, mas eu queria saber o inicio e o fim para este código funcionar
alguma alma boa pode terminar de fazer o codigo para mim que so seja preciso compilar e rodar? eu não sei como começar este código e nem como terminar, por favor ai gente me de uma maozinha!!! :oops:
Eu acabei usando a biblioteca jcifs na época. Me atendeu muito bem.
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;
[....]
System.setProperty("jcifs.smb.client.username", usuario);
System.setProperty("jcifs.smb.client.password", senha);
/*
* Lê o path onde o arquivo vai ser gerado,
* o formato é:
* file://192.168.0.100/xpto/"
* onde 192.168.0.100 é o ip da maquina
* ou
* file://sputinik/xpto/"
* onde sputinik é o nome da maquina
*/
SmbFile f = new SmbFile(filePath);
//Abre o arquivo
SmbFileOutputStream out = new SmbFileOutputStream(f);
//Escreve o conteúdo do arquivo
out.write(data);
//Fecha o arquivo e o libera para ser usado por outra aplicação
out.close();
por caridade alguém pode me ajudar com esse código do colega para ele funcionar?? eu não sei que nome eu salvo ele .java . não sei o que devo colocar no inicio do código e nem do fim :oops: :oops: :oops: :oops:
Sim! Eu usei outra solução. A que eu postei acima.
Mas se você não conhece Java muito bem sugiro que peça um apoio a alguem, pois não é uma atividade tão trivial e pode dar problemas de ambiente para ambiente.
ronaldocwb Ronaldo eu não sei se é permitido falar isso aqui no forum mas existe algum meio de te pagar um dinheiro para você consertar esse código do colega para eu finalmente aprender como abrir programa em rede usando java? :twisted: