FTP com Java

6 respostas
Sandler

Salve galera…

Alguém por aí sabe usar os recursos do sun.net.ftp que vem no NetBeans 4.1?
Se não, alguém tem a manha em ftp com Java?

Atenciosamente…

Sandler Giovanni

6 Respostas

foia

veja:
http://www.guj.com.br/java.artigo.154.1.guj

nao recomento usar os pacotes sun.*. nao lembro o porque, mas vai por mim, nao usa. :mrgreen:

Sandler

Valeu galera, mas já encontrei um pacote que resolve meu problema… obrigado!

Sandler

Bom galera… meu problema está resolvido em partes… É que surgiu um outro.
Seguinte… o FTP funciona redondo, estou usando o pacote FTPBean e o aplicativo é bastante rápido e funcional… mas ocorre o seguinte: preciso convertê-lo em um Applet.
Criei o applet no NetBeans 4.1 e quando executo (simplesmente executando o arquivo FTP.java), o applet surge com toda funcionalidade codificada funcionando, entretanto, quando rodo o aplicativo via browser ele retorna “java.lang.NullPointerException”, e eu não descobri o porque disso até agora.
Se alguém puder me dar uma luz, fico no aguardo.
Tenho o pacote FTPBean zipado, caso alguém se disponha, posso mandar por e-mail. O código do applet segue abaixo:

import ftp.<em>;

import java.awt.</em>;

import java.awt.event.<em>;

import <a href="http://java.io">java.io</a>.</em>;

import java.net.SocketException;

import java.lang.String;

import javax.swing.*;
public class FTP extends JApplet implements ActionListener

{

/* *********************** Instanciando variáveis *********************** */

private FtpBean ftpCliente; // Pacote Ftp NetBeans

private File arquivo, pasta;

private String agente;

private boolean reenviar;

private JButton btnEnviar;
public void init() 
{
    Container container = getContentPane();
    JPanel painel = new JPanel();
    painel.setSize(64, 24);
    btnEnviar = new JButton("Enviar");
    btnEnviar.setSize(60,23);
    btnEnviar.addActionListener(this);
    painel.add(btnEnviar);
    painel.setVisible(true);
    container.add(painel);
    resize(70, 30);
}

public void actionPerformed(ActionEvent evento)
{
    /* *********** Variáveis Locais para Carregar os Arquivos *********** */
    byte[] tamanhoByte;
    long tamanhoArquivo;
    FileInputStream fisArquivo;
    agente = "Giovanni"; // Pasta do usuário corrente.
    reenviar = false;
         
    ftpCliente = new FtpBean();
    try 
    {
        ftpCliente.ftpConnect("127.0.0.1","anonimo","123456");
        ftpCliente.setPort(21);
        try
        {
            ftpCliente.setDirectory("/" + agente);
        }
        catch(FtpException e)
        {
            ftpCliente.setDirectory("/");
            ftpCliente.makeDirectory(agente);
            ftpCliente.setDirectory("/" + agente);
        }
        pasta = new File("C:/Teste"); // Pasta que contém os arquivos do sistema a serem enviados via FTP.
        for(int i = 0; i < pasta.listFiles().length; i++) 
        {
            arquivo = new File(pasta.getAbsolutePath(), pasta.list()[i]);
            if (arquivo.isFile() && arquivo.length() > 0 && extensaoArquivo(arquivo).compareToIgnoreCase(".jpg") == 0) 
            {
                tamanhoArquivo = (int) arquivo.length();
                fisArquivo = new FileInputStream(arquivo);
                byte[] conteudo = new byte[(int) tamanhoArquivo];
                int j= 0, k = 0;
                while(j < conteudo.length) 
                {
                    k = fisArquivo.read(conteudo, 0, conteudo.length - j);
                    j += k;
                }
                try 
                {
                    ftpCliente.putBinaryFile(arquivo.getName(), conteudo);
                } 
                catch(FtpException e) 
                {
                    reenviar = true; // Deixa o botão enviar habilitado caso ocorra alguma falha no envio (apenas para tentar enviar novamente).
                }
            }
        }
    } 
    catch(SocketException socketException) 
    {
        reenviar = true; // Deixa o botão enviar habilitado caso ocorra alguma falha no envio (apenas para tentar enviar novamente).
    }
    catch(Exception FtpException) 
    {
        reenviar = true; // Deixa o botão enviar habilitado caso ocorra alguma falha no envio (apenas para tentar enviar novamente).
    } 
    finally 
    {
        if (!reenviar)
            desconectar(); // Chamada ao metodo para desconectar.
        btnEnviar.setEnabled(reenviar);
        this.repaint();
    }        
}

public void desconectar()
{
    try
    {
        ftpCliente.close();
    }
    catch(Exception e)
    {
        ; // Não é necessário fazer nada.
    }        
}

public String extensaoArquivo(File x) 
{
    String saida = "";
    for(int i = x.getName().length() - 1; i >= x.getName().length() - 4; i--) 
    {
        saida = x.getName().charAt(i) + saida;
    }
    
    return saida;
}    

public void destroy()
{
    desconectar();
    try 
    {
        System.exit(0);
    } 
    catch(Exception e) 
    {
        ;// Não é necessário fazer nada.
    }
}

}

Sandler

Salve galera… Cá estou eu novamente…
Seguinte… não estava conseguindo fazer o applet carregar no browser, mas agora ele carrega (tipo que aparece a animação de load com logotipo Java e tudo mais). Entretanto, está me retornando um erro que é o seguinte:

“Applet notinited”

Na tela do Java Console consta o seguinte:

Java Plug-in 1.5.0_04
Using JRE version 1.5.0_04 Java HotSpot™ Client VM
User home directory = C:\Documents and Settings\Giovanni


c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
p: reload proxy configuration
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to

java.lang.NoClassDefFoundError: ftp/FtpException

at java.lang.Class.getDeclaredConstructors0(Native Method)

at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)

at java.lang.Class.getConstructor0(Unknown Source)

at java.lang.Class.newInstance0(Unknown Source)

at java.lang.Class.newInstance(Unknown Source)

at sun.applet.AppletPanel.createApplet(Unknown Source)

at sun.plugin.AppletViewer.createApplet(Unknown Source)

at sun.applet.AppletPanel.runLoader(Unknown Source)

at sun.applet.AppletPanel.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Bem… o applet para e não mostra o botão que deveria mostrar (que é o único componente visual que tem nele). O método init tá codificado corretamente. Tem uns “repaint()” da vida em locais estratégicos e a classe (ftpException) que ele acusa não ter sido encontrada foi importada no arquivo principal.
Garrei neste ponto… não sei mais o que fazer. Enquanto estou em fase de desenvolvimento dentro do NetBeans tudo roda bem (inclusive tá fazendo ftp rápido pacaralh… com conexão discada que eu testei aqui).
Alguém pode me dar uma orientação… deve ter alguma besteira que eu omiti no código e não consigo descobrir o que está faltando.
No mais… valeu a atenção!

Sandler

Salve galera…

Finalmente consegui fazer tudo rodar…
Agradeço as pessoas que interessaram em me ajudar e me mandaram e-mail. Valeu a força.
Caso alguém um dia precise… eu mando o que tenho pronto pra darem uma olhada.

Té mais!

DesignerH

Cara estou com o mesmo problema de “Applet notinited” será que você pode me dizer como conseguiu resolver?? :roll: Meu email é [email removido]

Desde já muito Obrigado

Sandler:
Salve galera…

Finalmente consegui fazer tudo rodar…
Agradeço as pessoas que interessaram em me ajudar e me mandaram e-mail. Valeu a força.
Caso alguém um dia precise… eu mando o que tenho pronto pra darem uma olhada.

Té mais!

Criado 8 de julho de 2005
Ultima resposta 17 de jan. de 2007
Respostas 6
Participantes 3