//////////////////////////////////////////////////////////////////////////////// // NLSTcomm class. // //////////////////////////////////////////////////////////////////////////////// import java.net.*; import java.io.*; class NLSTcomm extends ftpFunc { public void start(ftpState sessionState) { System.out.println("NLSTobj started!!"); DataOutputStream sendBuf = null; //Escrita. Socket tSocket = null; // Data connection. //--------------------------------------------------------------------------------------- // Prepara a data connection. // try { sessionState.sendMesg.writeBytes("150 Abrindo conexão binária.\r\n"); sessionState.sendMesg.flush(); // Cria o socket. tSocket = new Socket(sessionState.remoteInetAddress, 2222);//sessionState.remotePort); // Output stream. sendBuf = new DataOutputStream(new BufferedOutputStream(tSocket.getOutputStream())); } catch (UnknownHostException e) { System.out.println("Don't know about host."); } catch (IOException e) { System.out.println(e); } //--------------------------------------------------------------------------------------- // Se tiver wild card no parâmetro é porque será a listagem do diretório e com o texto // depois do último separador como máscara. // String mask = null; wildCard fileFilter; if(sessionState.param != null) { if(sessionState.param.indexOf('*') != -1) { if(sessionState.param.endsWith(File.separator)) { sessionState.param = sessionState.param.substring(0,sessionState.param.length()-1); } int lastIxOfSep = sessionState.param.lastIndexOf(File.separator); if(lastIxOfSep != -1) { mask = sessionState.param.substring(lastIxOfSep+1); sessionState.param = sessionState.param.substring(0,lastIxOfSep); // Caso: /*.java if(sessionState.param.length() == 0) { sessionState.param = null; } } else { mask = sessionState.param; sessionState.param = null; } } System.out.println(sessionState.param+" "+mask); fileFilter = new wildCard(mask); } else { fileFilter = new wildCard(null); } //--------------------------------------------------------------------------------------- // Envia o list. // File listFile = null; if(sessionState.param == null) { // Diretório atual. // uga = new File("c:\\"); buga = uga.list(); da' pau, buga == null... listFile = new File(sessionState.rootPath,sessionState.path); } else if(sessionState.param.charAt(0) == File.pathSeparatorChar) { // Path 'absoluto'. listFile = new File(sessionState.rootPath,sessionState.param); } else { // Path 'relativo'. listFile = new File(sessionState.rootPath,sessionState.path+sessionState.param); } if(listFile.exists()) { if(listFile.isFile()) { try { sendBuf.writeBytes(listFile.getName()+"\r\n"); } catch (IOException e) { System.out.println(e); } } else if(listFile.isDirectory()) { String listDir[] = listFile.list(fileFilter); try { if(listDir == null) System.out.println(listFile.getCanonicalPath()); if(listDir == null) System.out.println(listFile.getAbsolutePath()); } catch (IOException e) { System.out.println(e); } for(int i = 0; i < listDir.length; i++) { try { sendBuf.writeBytes(listDir[i]+"\r\n"); } catch (IOException e) { System.out.println(e); } } } try { sendBuf.flush(); // Termina a conexão de dado. tSocket.close(); // Envia mensagem de transmissão terminada. sessionState.sendMesg.writeBytes("226 Transferência efetuada.\r\n"); sessionState.sendMesg.flush(); } catch (IOException e) { System.out.println(e); } } else { try { // Termina a conexão de dado. tSocket.close(); sessionState.sendMesg.writeBytes("550 Arquivo não existe.\r\n"); sessionState.sendMesg.flush(); } catch (IOException e) { System.out.println(e); } } } }