Update automatico da aplicação

[quote=marcobiscaro2112]A biblioteca está no link do meu post anterior. É a jCIFS [1]. Na API [2] tem vários exemplos, mas basicamente você precisa criar uma conexão remota, ler de um SmbFileInputStream e escrever em um FileOutputStream local. Algo como:

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password");
InputStream in = new SmbFileInputStream("smb://host/c/My Documents/somefile.txt", auth);
OutputStrem out = new FileOutputStream("/caminho/para/salvar/o/jar");

// aqui você lê do InputStream e escreve o valor lido no OutputStream

// talvez usar as versões Buffered(In|Out)putStream ajude na performance

[1] http://jcifs.samba.org/
[2] http://jcifs.samba.org/src/docs/api/[/quote]

Olá Marcos,você possui experiencia com esse pacote? Estou tendo alguns problemas com ele…

Estou fazendo o seguinte:

[code] jcifs.Config.setProperty( “jcifs.netbios.wins”, “10.216.6.1” );
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(“internal”, “tra”, “tra”);
SmbFile file;
file = new SmbFile(“smb://10.192.24.203/corpisa/SQL 2008/MYSQL/readme.txt”, auth);

    SmbFileInputStream fis = new SmbFileInputStream(file);
    SmbFileOutputStream fos = null;
    
    byte[] b = new byte[8192];
    int n;
    while(( n = fis.read( b )) > 0 ) {
        System.out.write( b, 0, n );
        fos.write(b,0,n);
    }
    
    fos = new SmbFileOutputStream("C:/readme.txt");[/code]

Consigo pegar o arquivo e coloca-lo no SmbFile porém quando dou o fos.write ele simplesmente para a execução…
Como devo fazer para pegar o arquivo e dar o write para depois faze-lo salvar no pc ???
Estou tentando ir pelo site que você me passou mais so consegui até ai…
Obrigado

[quote=bacoco]
Olá Marcos,você possui experiencia com esse pacote? Estou tendo alguns problemas com ele…[/quote]
É Marco, não Marcos. Bem, nunca utilizei este pacote, mas parece que tem algo errado no seu código. Tente algo como:

        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("internal", "tra", "tra");
        SmbFile file = new SmbFile("smb://10.192.24.203/corpisa/SQL 2008/MYSQL/readme.txt", auth);
        
        SmbFileInputStream fis = new SmbFileInputStream(file);
        // você deve criar um FileOutputStream (local) e não um SmbFileOutputStream (remoto)
        FileOutputStream fos = new FileOutputStream("C:/readme.txt"); // a instanciação deve vir antes do laço while
        
        byte[] b = new byte[8192];
        int n;
        while (( n = fis.read( b )) > 0 ) {
            fos.write(b,0,n);
        }

        fis.close();
        fos.close();

Olá Marco,perdão o costume,meu pai possui o S no final…

Estou fazendo da seguinte maneira agora…

[code]
FileOutputStream ffs = null;

    try{
        jcifs.Config.setProperty( "jcifs.netbios.wins", "10.216.6.222" );
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("internal.timbrasil.com.br", "Administrator", "preventiva");
        
        file = new SmbFile("smb://10.216.6.222/preventiva/dist/PreventivaApp.jar", auth);
        

        SmbFileInputStream fis = new SmbFileInputStream(file);
        ffs = new FileOutputStream("\\RCVNA\\PreventivaApp.jar");

        byte[] b = new byte[8192];
        int n;
        while(( n = fis.read( b )) > 0 ) {
            System.out.write( b, 0, n );
            ffs.write(b,0,n);
        }
        
    }catch(Exception e){
        e.printStackTrace();
        System.out.println("Erro: "+e);
    }finally{
        //NÂO ESQUECER DE DAR CLOSE NOS STREAMS
        fos.close();
        ffs.close();            
    }  
}[/code]

Porém não está funcionando,com um arquivo do tipo .txt funciona perfeitamente…

Se você tiver alguma sugestão gostaria de fazer diretamente com a pasta…
Acho que copiando a pasta seria melhor pois vai pegar todo o conteudo que preciso ao inves de ter que repetir o processo com todos os arquivos…
Obrigado.

Vamos lá:

Linha 11: porquê este formato com barras invertidas ao invés de “C:/RCVNA/PreventivaApp.jar”?

Linha 25: de onde vem esta variável fos?

Linha 26: você precisa primeiro verificar se a variável chegou a ser instanciada para depois chamar o close:

if (ffs != null) {
    ffs.close();
}

Além disso, aparece algum erro?

[quote=marcobiscaro2112]Vamos lá:

Linha 11: porquê este formato com barras invertidas ao invés de “C:/RCVNA/PreventivaApp.jar”?

Linha 25: de onde vem esta variável fos?

Linha 26: você precisa primeiro verificar se a variável chegou a ser instanciada para depois chamar o close:

if (ffs != null) {
    ffs.close();
}

Além disso, aparece algum erro?[/quote]

Alterei segundo seu conselhos, o fos foi o nome que saiu errado é a ffs e fis apenas, segue como está agora:

[code]
public void coneca() throws IOException{
SmbFile file;
FileOutputStream ffs = null;
SmbFileInputStream fis = null;

    try{
        jcifs.Config.setProperty( "jcifs.netbios.wins", "10.216.6.222" );
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("internal.timbrasil.com.br", "Administrator", "preventiva");
        
        file = new SmbFile("smb://10.216.6.222/preventiva/dist/PreventivaApp.jar", auth);
        

        fis = new SmbFileInputStream(file);
        ffs = new FileOutputStream("C:/RCVNA/PreventivaApp.jar");

        byte[] b = new byte[8192];
        int n;
        while(( n = fis.read( b )) > 0 ) {
            System.out.write( b, 0, n );
            //fos.write(b,0,n);
            ffs.write(b,0,n);
        }
        
    }catch(Exception e){
        e.printStackTrace();
        System.out.println("Erro: "+e);
    }finally{
        //NÂO ESQUECER DE DAR CLOSE NOS STREAMS
        if (ffs != null) {  
                ffs.close();  
        }
        if(fis != null){
            fis.close();
        }        
    }  
}[/code]

Ele chega a criar o arquivo na pasta,porém ele fica somente com 8KB debugando ele entra no while faz um write e na segunda vez que ele vai correr dentro do while ele simplsemente para a execução,sem me retornar nada…(Alguma exceção que esqueci de tratar?)