[RESOLVIDO] Abrir arquivo em rede

Olá pessoa, estou uma pequena dúvida, eu preciso abrir um arquivo texto que esta no servidor de uma rede, só que eu não to conseguindo, eu tento abrir o arquivo, mas quando eu uso o flie.exists dá que ele não existe, mas o arquivo ta la, abaixo vou colocar a parte do código:

File file = new File("\\198.168.0.101\\Compartilhada\\config.txt");
if (file.exists()){
                    stream = new FileInputStream("\\\\198.168.0.101\\Compartilhada\\config.txt");
                    streamReader = new InputStreamReader(stream);
                    reader = new BufferedReader(streamReader);

                    line = reader.readLine();
}

Onde esta o erro?

1 curtida

Aqui vc está usando apenas duas barras \

File file = new File("\\198.168.0.101\\Compartilhada\\config.txt"); 

Como o arquivo está na rede deveria ser assim:

File file = new File("\\\\198.168.0.101\\Compartilhada\\config.txt"); 

A tá não so foi um erro de digitação aqui no forum no programa ta como vc sugeriu.

Tambem estou com o mesmo problema! Ja pesquisei em diversas fontes e até agora nada consegui! meu código esta muito parecido com o do Vinny, porém eu só verifico se o diretório existe!!! Se alguém puder ajudar!!!

Afff ta foda, um negocio simples, eu nao intendo pq nao funciona se eu for direto pelo explorer eu digito o caminho e abri normal, agora dentro do java eu nao consigo acessa essa budega.

Ja tentei usando

File file = new File("file:///\\\\198.168.0.101\\Compartilhada\\config.txt");

mas tb nao funcionou, também tentei mapear uma unidade de rede mas sem sucesso

File file = new File("Z:Compartilhada\\config.txt");

tentei tb acessar pelo nome do computador na rede

File file = new File("\\\\SERVIDOR-PC\\Compartilhada\\config.txt");

mas advinha só? tb não funcionou

Será que so eu e o alanweb estamos passando por isso, ngm nunca teve esse problema?

O erro está em tentar usar uma solução que só funciona em Windows (aliás, deveria funcionar, mas não está funcionando).

Sugiro que use a API jCIFS, pois funciona, e em qualquer sistema operacional. Além disso tem suporte a autenticação, dentre outras coisas.

Site: http://jcifs.samba.org/

O JAR que você vai precisar tem menos de 400KB.

Veja um exemplo:

import java.io.InputStream;
import java.util.Scanner;
import jcifs.smb.SmbFile;

public class Compartilhamento {

	public static void main(String[] args) throws Exception {
		SmbFile file = new SmbFile("smb://172.16.0.3/public/arquivo.txt");
		if (file.exists()) {
			InputStream stream = file.getInputStream();
			Scanner sc = new Scanner(stream);
			while (sc.hasNextLine()) {
				System.out.println(sc.nextLine());
			}
		}
	}

}

tenda usar a outra barra /

O erro está em tentar usar uma solução que só funciona em Windows (aliás, deveria funcionar, mas não está funcionando).

Sugiro que use a API jCIFS, pois funciona, e em qualquer sistema operacional. Além disso tem suporte a autenticação, dentre outras coisas.

Site: http://jcifs.samba.org/

O JAR que você vai precisar tem menos de 400KB.

Veja um exemplo:

[code]
import java.io.InputStream;
import java.util.Scanner;
import jcifs.smb.SmbFile;

public class Compartilhamento {

public static void main(String[] args) throws Exception {
	SmbFile file = new SmbFile("smb://172.16.0.3/public/arquivo.txt");
	if (file.exists()) {
		InputStream stream = file.getInputStream();
		Scanner sc = new Scanner(stream);
		while (sc.hasNextLine()) {
			System.out.println(sc.nextLine());
		}
	}
}

}
[/code][/quote]

Vou dar uma olhada nessa lib!

Mais Marco vc sabe dizer o pq da api padrão não fincionar no linux???

O erro está em tentar usar uma solução que só funciona em Windows (aliás, deveria funcionar, mas não está funcionando).

Sugiro que use a API jCIFS, pois funciona, e em qualquer sistema operacional. Além disso tem suporte a autenticação, dentre outras coisas.

Site: http://jcifs.samba.org/

O JAR que você vai precisar tem menos de 400KB.

Veja um exemplo:

[code]
import java.io.InputStream;
import java.util.Scanner;
import jcifs.smb.SmbFile;

public class Compartilhamento {

public static void main(String[] args) throws Exception {
	SmbFile file = new SmbFile("smb://172.16.0.3/public/arquivo.txt");
	if (file.exists()) {
		InputStream stream = file.getInputStream();
		Scanner sc = new Scanner(stream);
		while (sc.hasNextLine()) {
			System.out.println(sc.nextLine());
		}
	}
}

}
[/code][/quote]

Cara vc acabou de salvar uma vida, hehehehehe, eu tava precisando fazer isso logo para poder colocar o meu sistema pra funcionar em rede na empresa, o sistema ta pronto só faltava ele funcionar em rede, agora deu certo, brigadão!!!

Mas minha dúvida é a mesma que a do Alan, pq não funciona?
Não sei se estou certo mas acredito que seja alguma coisa aver com a JVM do java.

Na verdade, endereços como “\servidor\compartilhamento” não são manipuláveis em Java. Quem consegue “entender” coisas assim são as APIs do Windows (por isso que, às vezes, usar isso resolve, mas só no Windows).

No Linux, o navegador de arquivos (Nautilus, no GNOME) usa endereços como “smb://servidor/compartilhamento”. Se tentássemos usar isso em Java teríamos mais problemas pelo mesmo motivo: são endereços manipulados pelo sistema operacional e suas bibliotecas, não pela JVM.

A solução: usar uma API, toda feita em Java, que acesse os compartilhamentos de forma padronizada (e como é 100% Java, funciona em qualquer sistema operacional exatamente da mesma forma).

Funcionou que é uma maravilha!!!

Com relação a api padrão, isso sempre foi uma coisa que eu não entendi, o fato de sempre parecer muito windows, se a grande sacada do java é ser multiplataforma, e uma api padrão não funcionar bem em um sistema como linux, acho q faltou justamente a abstração do SO nesse caso!

Mas fica a dica a API jCIFS é uma mão na roda!

alguém sabe como copiar um arquivo do SD de um tablet para o compartilhamento na rede? o SmbFile não aceita esse caminho “/sdcard/xml/arquivo.xml”

Segue meu código

        String  name="usuario";
        String  password="123456";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, name, password);
        String url="smb://servidor/pasta";
        
        SmbFile smbFile_Source = new SmbFile("/sdcard/xml/arquivo.xml");
        SmbFile smbFile_dest = new SmbFile(url+arquivo, auth);
        
        smbFile_Source.copyTo(smbFile_dest);

Use File da api padrão para ler seu arquivo no sd:

File smbFile_Source = new File("/sdcard/xml/arquivo.xml");

[quote=alanweb]Use File da api padrão para ler seu arquivo no sd:

File smbFile_Source = new File("/sdcard/xml/arquivo.xml");

Valew alanweb, mas se eu fizer assim o copyTo deste trecho

smbFile_Source.copyTo(smbFile_dest);

não funciona, só funcionaria se eu mantivesse como SmbFile.

mantendo como SmbFile acusa esse erro:

02-13 09:42:24.360: W/System.err(3406): java.net.MalformedURLException: Protocol not found: /sdcard/xml/arquivo.xml

Amigo,

não quero ressuscitar tópicos, mas como fiz uma pergunta e ninguém me responde, pergunto se na sua aplicação você precisa de alguma função para abrir o arquivo da rede utilizando o samba?

Se tiver o código estou precisando muito, amigo. Valeu.

Paulo