Red de conocimiento del abogados - Respuesta jurídica de la empresa - Cómo obtener la ruta del archivo desde ftp en java

Cómo obtener la ruta del archivo desde ftp en java

Tómalo y úsalo.

paquete?com.weixin.util;

importar?java.io.File;

importar?java.io.FileOutputStream;

importar?java.io .IOException;

importar?java.io.InputStream;

importar?java.io.OutputStream;

importar?java.io.PrintWriter;

p>

importar?java.io.RandomAccessFile;

importar?org.apache.commons.net.PrintCommandListener;

importar?org.apache. commons.net.ftp .FTP;

importar?org.apache.commons.net.ftp.FTPClient;

importar?org.apache.commons.net.ftp.FTPFile;

importar?org.apache.commons.net.ftp.FTPReply;

importar?com.weixin.constant.DownloadStatus;

importar?com.weixin .constant.UploadStatus;

/** *?Clase de utilidad FTP que admite transferencia de reanudación de punto de interrupción*?@versión?0.1?Lograr carga y descarga de punto de interrupción básica*?@versión?0.2?Lograr progreso de carga y descarga report*?@version ?0.3? Implementar la creación de directorios en chino y la creación de archivos en chino, y agregar soporte para chino*/

public?class?ContinueFTP?{

public?FTPClient?ftpClient ?=?new? FTPClient();

public?ContinueFTP(){

//Establece los comandos utilizados en el proceso que se enviarán a la consola

this.ftpClient.addProtocolCommandListener (new?PrintCommandListener(new?PrintWriter(System.out)));

}

/**

?*? Conéctese al servidor FTP

?*?@param?hostname?Hostname

?*?@param?port?Port

?*?@param?username ?Nombre de usuario

?*?@param?contraseña?Contraseña

?*?@return?Si la conexión fue exitosa

?*?@throws?IOException

?*/

public?boolean?connect(String?hostname, int?port, String?username, String?password)?throws?IOException{

ftpClient.connect(nombre de host,?puerto);

ftpClient.setControlEncoding

("GBK");

if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){

if(ftpClient.login(nombre de usuario,?contraseña)){

retorno?verdadero;

}

}

desconectar();

retorno?falso;

}

/**

?*?Descargar archivos desde el servidor FTP, admitir la reanudación del punto de interrupción, cargar informe de porcentaje

?* @param ?remoto?Ruta del archivo remoto

?*?@param?local?Ruta del archivo local

?*?@return?Estado de carga

*?@ throws?IOException

?*/

public?DownloadStatus?download(String?remote, String?local)?throws?IOException{

/ /Establecer pasivo mode

ftpClient.enterLocalPassiveMode();

//Establecer transmisión binaria

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

DownloadStatus ?result;

//Comprueba si el archivo remoto existe

FTPFile[]?files?=?ftpClient.listFiles(new?String(remote.getBytes(" GBK"), "iso-8859-1"));

if(files.length?=?1){

System.out.println("El archivo remoto no existe") ;

return?DownloadStatus.Remote_File_Noexist;

}

long?lRemoteSize?=?files[0].getSize();

File?f?=?new?File(local);

//El archivo existe localmente, descárgalo con punto de interrupción

if(f.exists()){

long?localSize?=?f.length();

//Determinar si el tamaño del archivo local es mayor que el tamaño del archivo remoto

if(localSize?gt ; =?lRemoteSize){

System.out.println("El archivo local es más grande que el archivo remoto, la descarga se canceló");

return?DownloadStatus.Local_Bigger_Remote;

}

//Reanudar el punto de interrupción y registrar el estado

FileOutputStream?out?=?new?FileOutputStream(f, true);

ftpClient.setRestartOffset(localSize);

Entrada

Stream?in?=?ftpClient.retrieveFileStream(new?String(remote.getBytes("GBK"),"iso-8859-1"));

byte[]?bytes?=?new? byte[1024];

long?step?=?lRemoteSize?/100;

long?process=localSize?/step;

int?c;

while((c?=?in.read(bytes))!=?-1){

out.write(bytes, 0, c

);

localSize =c;

long?nowProcess?=?localSize?/step;

if(nowProcess?gt;?process){

proceso ?=?nowProcess;

if(process??10?==?0)

System.out.println("Progreso de la descarga: " proceso);

//TODO? Actualizar el progreso de descarga del archivo, el valor se almacena en la variable de proceso

}

}

in.close();

out.close();

booleano?isDo?=?ftpClient.completePendingCommand();

if(isDo){

resultado ?= ?DownloadStatus.Download_From_Break_Success;

}else?{

resultado?=?DownloadStatus.Download_From_Break_Failed;

}

}else ?{

OutputStream?out?=?new?FileOutputStream(f);

InputStream?in=?ftpClient.retrieveFileStream(new?String(remote.getBytes("GBK") ," iso-8859-1"));

byte[]?bytes?=?new?byte[1024];

long?step?=?lRemoteSize?/100 ;

long?process=0;

long?localSize?=?0L;

int?c;

while(( c? =?in.read(bytes))!=?-1){

out.write(bytes,?0,?c);

localSize =c;

long?nowProcess?=?localSize?/step;

if(nowProcess?gt;?process){

proceso?=?nowProcess;

if(process??10?==?0)

System.out.println("Progreso de la descarga: " proceso); ?Actualizar el progreso de descarga del archivo, el valor se almacena en la variable de proceso

}

}

in.close()

; out.close();

boolean?upNewStatus?=?ftpClient.completePendingCommand();

if(upNewStatus){

resultado?=?DownloadStatus. Download_New_Success;

}¿otra cosa?{

resultado?=?DownloadStatus.Download_New_Failed

}

}

devolver ?resultado;

}

/**

?*?Subir archivos al servidor FTP, admitiendo la reanudación del punto de interrupción

? *?@param?local?Nombre del archivo local, ruta absoluta

?*?@param?remote?Ruta del archivo remoto, use /home/directory1/subdirectory/file.ext?Especifique según la ruta en el método Linux, admite anidamiento de directorios de varios niveles y admite la creación recursiva de estructuras de directorios inexistentes

?*?@return?Upload results

?*?@throws?IOException

?*/

public?UploadStatus?upload(String?local, String?remote)?throws?IOException{

//Establecer transmisión en modo pasivo

ftpClient.enterLocalPassiveMode();

//Configuración para transmisión de flujo binario

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

ftpClient .setControlEncoding( "GBK");

UploadStatus?result;

//Procesamiento de directorios remotos

String?remoteFileName?=?remote;

if(remote.contains("/")){

nombre de archivo remoto?=?remote.substring(remote.lastIndexOf("/") 1);

/ /Create La estructura del directorio remoto del servidor se devolverá directamente si la creación falla

if(CreateDirecroty(remote,?ftpClient)==UploadStatus.Create_Directory_Fail){

return?UploadStatus.Create_Directory_Fail ;

}

}

//Comprueba si el archivo remoto existe

FTPFile[]?files?=?ftpClient.listFiles(new?String(remoteFileName.getBytes("GBK"),"iso-8859-1"));

if(files.length?== ?1){

long?remoteSize?=?files[0].getSize();

¿Archivo?f?=?new?File(local);

long?localSize?=?f.length();

if(remoteSize==localSize){

return?UploadStatus.File_Exits;

}else?if(remoteSize?gt;?localSize){

return?UploadStatus.Remote_Bigger_Local;

}

//Intenta mover el puntero de lectura el archivo, realice la transferencia de reanudación del punto de interrupción

result?=?uploadFile(remoteFileName,?f,?ftpClient,?remoteSize);

//Si falla la reanudación del punto de interrupción, elimine el archivo en el servidor, vuelva a cargar

if(result?==?UploadStatus.Upload_From_Break_Failed){

if(!ftpClient.deleteFile(remoteFileName)){

return ?UploadStatus.Delete_Remote_Faild;

}

resultado?=?uploadFile(remoteFileName,?f,?ftpClient,?0);

}

}¿else?{

resultado?=?uploadFile(remoteFileName,?new?File(local),?ftpClient,?0);

}

return?resultado;

}

/**

?*?Desconectarse del servidor remoto

?*?@ throws?IOException

?*/

public?void?disconnect()?throws?IOException{

if(ftpClient.isConnected()) {

ftpClient.disconnect();

}

}

/**

?*? directorio del servidor

?*?@param?remote?Ruta absoluta del archivo del servidor remoto

?*?@param?ftpClient?FTPClient objeto

*? @return?Si el directorio se creó correctamente

?*?@throws?IOException

?*/

public?UploadStatus?CreateDirecroty(String

?remoto, FTPClient?ftpClient)?throws?IOException{

UploadStatus?status?=?UploadStatus.Create_Directory_Success;

String?directory?=?remote.substring(0,remote. lastIndexOf("/") 1);

if(!directory.equalsIgnoreCase("/")&!ftpClient.changeWorkingDirectory(new?String(directory.getBytes("GBK")," iso- 8859-1"))){

//Si el directorio remoto no existe, crea recursivamente el directorio del servidor remoto

int?start=0;

int?end?=?0;

if(directory.startsWith("/")){

start?=?1;

}else {

start?=?0;

}

end?=?directory.indexOf("/", inicio);

while(true){

String?subDirectory?=?new?String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");

if(!ftpClient.changeWorkingDirectory(subDirectorio)){

if(ftpClient.makeDirectory(subDirectorio)){

ftpClient.changeWorkingDirectory(subDirectorio);

}¿otra cosa?{

System.out.println("Error al crear el directorio");

return?UploadStatus.Create_Directory_Fail;

}

}

inicio?=?end?1;

fin?=?directory.indexOf("/", inicio);

//Comprueba si se han creado todos los directorios

if(end?lt;=?start){

break;

}

}

}

devolución?estado;

}

/**

? *? Cargar archivos al servidor, nueva carga y carga reanudable

?*?@param?remoteFile?Nombre del archivo remoto, el directorio de trabajo del servidor se cambió antes de cargar

* ?@param?localFile?Archivo local Identificador de archivo, ruta absoluta

?*?@param?processStep?El valor del paso de progreso del procesamiento que se mostrará

?*?@param?ftpClient?FTPClient referencia

?*?@return

?*?@throws?IOException

?*/

public?UploadStatus?uploadFile(String?remoteFile, File?localFile, FTPClient?ftpClient, long?remoteSize)?throws?IOException{

UploadStatus?status;

// Subir mostrando el progreso

long?step?=?localFile.length()?/?100;

long?process?=?0;

long ? localreadbytes?=?0L;

RandomAccessFile?raf?=?new?RandomAccessFile(localFile, "r");

OutputStream?out?=?ftpClient.appendFileStream(new? String (remoteFile.getBytes("GBK"),"iso-8859-1"));

//Reanudar transferencia de punto de interrupción

if(remoteSizegt; 0){

p>

ftpClient.setRestartOffset(remoteSize);

proceso?=?remoteSize?/step;

raf.seek(remoteSize);

localreadbytes ?=?remoteSize;

}

byte[]?bytes?=?new?byte[1024];

int?c;

while((c?=?raf.read(bytes))!=?-1){

out.write(bytes, 0, c

<); p> localreadbytes =c;

if(localreadbytes?/?paso?!=?proceso){

proceso?=?localreadbytes?/?paso;

System. out.println("Progreso de la carga: "? ?proceso);

//TODO?Informar estado de carga

}

}

out.flush();

raf.close();

out.close();

booleano?resultado?=ftpClient. completePendingCommand() ;

if(remoteSize?gt;?0){

status?=?result?UploadStatus.Upload_From_Break_Success:UploadStatus.Upload_From_Break_Failed;

} ¿más?{

estado?=?resultado?Subir

Status.Upload_New_File_Success:UploadStatus.Upload_New_File_Failed;

}

return?status;

}

public?static?void?main( String[]?args)?{

ContinuarFTP?myFtp?=?new?ContinueFTP();

¿probar?{

System.err.println( myFtp.connect("10.10.6.236",?21,?"5",?"jieyan"));

// myFtp.ftpClient.makeDirectory(new?String("Song".getBytes( "GBK"), "iso-8859-1"));

// myFtp.ftpClient.changeWorkingDirectory(new?String("Song".getBytes("GBK"), "iso-8859- 1"));

// myFtp.ftpClient.makeDirectory(new?String("Amarte es igual a amarme a mí mismo".getBytes("GBK"), "iso-8859-1")) ;

// System.out.println(myFtp.upload("E:\\yw.flv",?"/yw.flv",5));

/ / System .out.println(myFtp.upload("E:\\Amarte es igual a amarme a mí mismo.mp4", "/Amarte es igual a amarme a mí mismo.mp4"));

/ /System.out.println (myFtp.download("/Amarte es igual a amarme a mí mismo.mp4",?"E:\\Amarte es igual a amarme a mí mismo.mp4"));

myFtp.disconnect();

}?catch?(IOException?e)?{

System.out.println("Error al conectarse a FTP: " e.getMessage()) ;

}

p>

}

}