Valeu! Deu certinho.
Brigadao. --- Janaine Cristiane de Souza <[EMAIL PROTECTED]> escreveu: > Ola.. > Eu achei um exemplo na rede de FTP... Essa classe > abre a conexao com o servidor e faz upload de um > arquivo de cada vez... > > Espero que isso lhe ajude... > > Um abraco, > Janaine > > Javaneando wrote: > > > Oi, > > > > preciso urgente de uma classe de exemplo > (fazFTP) > > que abre uma conexao ftp com um site qualquer, > > informa usuario e senha, lista os arquivos do > > servidor, muda o diretorio, faz um get e um > > delete! > > > > Será que eu vou ter que usar sockets para > > fazer isto? > > > > Não existe algo tipo java.net.ftpconnection > não? > > > > Se alguém me mandar um exemplo eu agradeço. > > > > Brigadao > > > > > > > > > _______________________________________________________________________________________________ > > Yahoo! GeoCities > > Tenha seu lugar na Web. Construa hoje mesmo sua > home page no Yahoo! GeoCities. É fácil e grátis! > > http://br.geocities.yahoo.com/ > > > > ------------------------------ LISTA SOUJAVA > ---------------------------- > > http://www.soujava.org.br - Sociedade de > Usuários Java da Sucesu-SP > > dúvidas mais comuns: > http://www.soujava.org.br/faq.htm > > regras da lista: > http://www.soujava.org.br/regras.htm > > para sair da lista: envie email para > [EMAIL PROTECTED] > > > ------------------------------------------------------------------------- > > > // > // **************************** Security Warning! > ************************ > // This is a serious warning, and you need to pay > attention to it. > // > // To work, this program needs you to put your ftp > password into the > // code as a String. This is only appropriate on > an Intranet or when > // the applet is on a page to which access is > otherwise controlled. > // > // A malicious person could access the applet > class file and easily > // retrieve YOUR password. Then they would have > access to your ftp > // account. They could add, delete, or change > files. They could even > // change the password. That would be very bad > for you. > // > // Giving away your password is frequently not > allowed by the terms of > // your account provider. Do NOT use this > program unless you are > // authorized to pass on your ftp password, and > you are able to firewall > // the ftp account or otherwise protect against > intrusion. One thing > // you could do is have a very small ftp area, and > only allow existing > // files to be appended (for example). > // > // Creating an applet with this program is like > publishing your password > // to anyone who can access the applet class file. > // > // If you still want to proceed, it is at your own > risk. > // **************************** Security Warning! > ************************ > // > // Usage: > // > // to upload a file: > // MyFTP ftp = new MyFTP( <servername>, > <user>, <password> ); > // ftp.upload( <directory>, <filename>, > <contents of file> ); > // > // to download a file: > // MyFTP ftp = new MyFTP( <servername>, > <user>, <password> ); > // String contents = ftp.download( > <directory>, <filename> ); > // > // the default is ASCII transfer, an > overloaded method does bin. > // > ////////////////////////////////////////////////////////////////////////// > > // NOTE: This code was adapted from the LinLyn > class available at > // http://www.afu.com. I added overloaded methods > for buffered file i/o. > // See the main method for examples. RMK > ///////////////////////////////////////////////////////////////////////// > > > import java.io.*; > import java.net.*; > import java.util.*; > > public class MyFTP { > > // FOR INITIAL DEBUGGING: set the variable to > "true" > private boolean DEBUG = true; > > private static final int CNTRL_PORT = 21; > private Socket csock = null; > private Socket dsock = null; > private DataInputStream dcis; > private PrintStream pos; > > > // constructor needs servername, username and > passwd > public MyFTP(String server, String user, String > pass) { > try { > ftpConnect(server); > ftpLogin(user, pass); > } catch(IOException ioe) {ioe.printStackTrace();} > } > public String download(String dir, String file) > throws IOException { > return download(dir, file, true); > } > public String download(String dir, String file, > boolean asc) > throws IOException { > ftpSetDir(dir); > ftpSetTransferType(asc); > dsock = ftpGetDataSock(); > InputStream is = dsock.getInputStream(); > ftpSendCmd("RETR "+file); > String contents = getAsString(is); > ftpLogout(); > return contents; > } > // this is the buffered version > public void download(String dir, String file, > boolean asc, String dest) throws Exception { > int BUFSIZE = 1000; > byte[] buf = new byte[BUFSIZE]; > int i; > > if (DEBUG) { > System.out.println("Downloading " + file); > } > ftpSetDir(dir); > ftpSetTransferType(asc); > dsock = ftpGetDataSock(); > BufferedInputStream in = new > BufferedInputStream(dsock.getInputStream(), > BUFSIZE); > FileOutputStream out = new FileOutputStream(dest); > ftpSendCmd("RETR "+file); > while ((i = in.read(buf)) != -1) { > out.write(buf, 0, i); > out.flush(); > } > in.close(); > out.close(); > ftpLogout(); > } > private void ftpConnect(String server) > throws IOException { > // Set up socket, control streams, connect to ftp > server > // Open socket to server control port 21 > csock = new Socket(server, CNTRL_PORT); > // Open control streams > InputStream cis = csock.getInputStream(); > dcis = new DataInputStream(cis); > OutputStream cos = csock.getOutputStream(); > pos = new PrintStream(cos); > > // handle more than one line returned > String reply = dcis.readLine(); > String numerals = reply.substring(0, 3); > String hyph_test = reply.substring(3, 4); > String next = null; > if(hyph_test.equals("-")) { > boolean done = false; > while(!done) { // read lines til find "" -> last > line > next = dcis.readLine(); > if(next.substring(0,3).equals(numerals) && > next.substring(3, 4).equals(" ")) > done = true; > } > } > > if(numerals.substring(0,3).equals("220")) // ftp > server alive > ; // System.out.println("Connected to ftp > server"); > else System.err.println("Error connecting to ftp > server."); > } > private Socket ftpGetDataSock() > throws IOException { > // Go to PASV mode, capture server reply, parse > for socket setup > // V2.1: generalized port parsing, allows more > server variations > String reply = ftpSendCmd("PASV"); > > // New technique: just find numbers before and > after ","! > StringTokenizer st = new StringTokenizer(reply, > ","); > String[] parts = new String[6]; // parts, incl. > some garbage > int i = 0; // put tokens into String array > while(st.hasMoreElements()) { > // stick pieces of host, port in String array > try { > parts[i] = st.nextToken(); > i++; > } catch(NoSuchElementException > nope){nope.printStackTrace();} > } // end getting parts of host, port > > // Get rid of everything before first "," except > digits > String[] diggies = new String[3]; > for(int j = 0; j < 3; j++) { > // Get 3 characters, inverse order, check if > digit/character > diggies[j] = parts[0].substring(parts[0].length() > - (j + 1), > parts[0].length() - j); // next: digit or > character? > if(!Character.isDigit(diggies[j].charAt(0))) > diggies[j] = ""; > } > parts[0] = diggies[2] + diggies[1] + diggies[0]; > // Get only the digits after the last "," > String[] porties = new String[3]; > for(int k = 0; k < 3; k++) { > // Get 3 characters, in order, check if > digit/character > // May be less than 3 characters > if((k + 1) <= parts[5].length()) > porties[k] = parts[5].substring(k, k + 1); > else porties[k] = "FOOBAR"; // definitely not a > digit! > // next: digit or character? > if(!Character.isDigit(porties[k].charAt(0))) > porties[k] = ""; > } // Have to do this one in order, not inverse > order > parts[5] = porties[0] + porties[1] + porties[2]; > // Get dotted quad IP number first > String ip = > parts[0]+"."+parts[1]+"."+parts[2]+"."+parts[3]; > > // Determine port > int port = -1; > try { // Get first part of port, shift by 8 bits. > int big = Integer.parseInt(parts[4]) << 8; > int small = Integer.parseInt(parts[5]); > port = big + small; // port number > } catch(NumberFormatException nfe) > {nfe.printStackTrace();} > if((ip != null) && (port != -1)) > dsock = new Socket(ip, port); > else throw new IOException(); > return dsock; > } > private void ftpLogin(String user, String pass) > throws IOException { > ftpSendCmd("USER "+user); > ftpSendCmd("PASS "+pass); > } > private void ftpLogout() {// logout, close streams > try { > if(DEBUG) System.out.println("sending BYE"); > pos.print("BYE" + "\r\n" ); > pos.flush(); > pos.close(); > dcis.close(); > csock.close(); > dsock.close(); > } catch(IOException ioe) {ioe.printStackTrace();} > } > private String ftpSendCmd(String cmd) > throws IOException > { // This sends a dialog string to the server, > returns reply > // V2.0 Updated to parse multi-string responses a > la RFC 959 > // Prints out only last response string of the > lot. > pos.print(cmd + "\r\n" ); > String reply = dcis.readLine(); > String numerals = reply.substring(0, 3); > String hyph_test = reply.substring(3, 4); > String next = null; > if(hyph_test.equals("-")) { > boolean done = false; > while(!done) { // read lines til find "" -> last > line > next = dcis.readLine(); > if(next.substring(0,3).equals(numerals) && > next.substring(3, 4).equals(" ")) > done = true; > } > if(DEBUG) > System.out.println("Response to: "+cmd+" was: > "+next); > return next; > } else > if(DEBUG) > System.out.println("Response to: "+cmd+" was: > "+reply); > return reply; > } > private void ftpSetDir(String dir) > throws IOException { > // cwd to dir > ftpSendCmd("CWD "+dir); > } > private void ftpSetTransferType(boolean asc) > throws IOException { > // set file transfer type > String ftype = (asc? "A" : "I"); > ftpSendCmd("TYPE "+ftype); > } > ///////////////// private fields > //////////////////// > private String getAsString(InputStream is) { > int c=0; > char lineBuffer[]=new char[128], buf[]=lineBuffer; > int room= buf.length, offset=0; > try { > loop: while (true) { > // read chars into a buffer which grows as > needed > switch (c = is.read() ) { > case -1: break loop; > > default: if (--room < 0) { > buf = new >char[offset + 128]; > room = buf.length - >offset - 1; > >System.arraycopy(lineBuffer, 0, > > buf, 0, offset); > lineBuffer = buf; > } > buf[offset++] = (char) c; > break; > } > } > } catch(IOException ioe) {ioe.printStackTrace();} > if ((c == -1) && (offset == 0)) { > return null; > } > return String.copyValueOf(buf, 0, offset); > } > // main method for testing purposes > public static void main(String args[]) { > MyFTP ftp; > String host = "Enter ftp hostname here"; > String username = "Enter username here"; > String password = "Enter password here"; > boolean ascii = true; > boolean binary = false; > > try { > > // download one ascii file > //ftp = new MyFTP(host, username, password); > //ftp.download("", "index.html", ascii, > "E:\\temp\\index.html"); > > // download one binary file > //ftp = new MyFTP(host, username, password); > //ftp.download("mcgraw-hill", "ch01.zip", binary, > "E:\\temp\\ch01.zip"); > > // upload one ascii file > //ftp = new MyFTP(host, username, password); > //ftp.upload("", "test.html", new > File("E:\\temp\\test.html"), ascii); > > // upload one binary file > ftp = new MyFTP(host, username, password); > ftp.upload("", "test.zip", new > File("E:\\temp\\test.zip"), binary); > > } catch (Exception e) { > e.printStackTrace(); > } > } > // this is the buffered version used in the agent > public void upload(String dir, String filename, > File file, boolean asc) > throws Exception { > int BUFSIZE = 1000; > byte[] buf = new byte[BUFSIZE]; > > ftpSetDir(dir); > ftpSetTransferType(asc); > dsock = ftpGetDataSock(); > OutputStream os = dsock.getOutputStream(); > BufferedOutputStream out = new > BufferedOutputStream(os); > FileInputStream in = new FileInputStream(file); > ftpSendCmd("STOR "+filename); > int i; > while ((i = in.read(buf)) != -1) { > out.write(buf, 0, i); > out.flush(); > } > in.close(); > out.close(); > ftpLogout(); > } > public void upload(String dir, String file, String > what) > throws IOException { upload(dir, file, what, > true); } > public void upload(String dir, String file, String > what, boolean asc) > throws IOException { > ftpSetDir(dir); > ftpSetTransferType(asc); > dsock = ftpGetDataSock(); > OutputStream os = dsock.getOutputStream(); > DataOutputStream dos = new DataOutputStream(os); > ftpSendCmd("STOR "+file); > dos.writeBytes(what); > dos.flush(); > ftpLogout(); > } > } > > ------------------------------ LISTA SOUJAVA > ---------------------------- > http://www.soujava.org.br - Sociedade de Usuários > Java da Sucesu-SP > dúvidas mais comuns: > http://www.soujava.org.br/faq.htm > regras da lista: > http://www.soujava.org.br/regras.htm > para sair da lista: envie email para > [EMAIL PROTECTED] > ------------------------------------------------------------------------- _______________________________________________________________________________________________ Yahoo! GeoCities Tenha seu lugar na Web. Construa hoje mesmo sua home page no Yahoo! GeoCities. É fácil e grátis! http://br.geocities.yahoo.com/ ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------