Project Download Address: http://download.csdn.net/download/ljj2312/10187480
Engineering structure: (used in the project, supporting the Chinese file name, pro-Test ok!)
Need to download the three jar packages above
FTP Tools class:
Package cn.ftp.util;
Import Java.io.BufferedOutputStream;
Import Java.io.ByteArrayInputStream;
Import Java.io.ByteArrayOutputStream;
Import Java.io.File;
Import java.io.FileNotFoundException;
Import Java.io.FileOutputStream;
Import java.io.IOException;
Import Java.io.InputStream;
Import Java.io.OutputStream;
Import java.net.SocketException;
Import Org.apache.commons.logging.Log;
Import Org.apache.commons.logging.LogFactory;
Import Org.apache.commons.net.ftp.FTP;
Import org.apache.commons.net.ftp.FTPClient;
Import org.apache.commons.net.ftp.FTPReply; /** * FTP Tool class * @author LIJJ/public class Ftputil {private final static Log logger = Logfactory.getlog (ftputil.cl
ASS);
/** Local character encoding */private static String Local_charset = "GBK";
In the FTP protocol, the specified filename is encoded as iso-8859-1 private static String Server_charset = "Iso-8859-1";
/** * Get FtpClient Object * * * @param ftphost * FTP Host Server * * @param ftppassword * FTP login password * * @param ftpusername * FTP Login Username * * @param ftpport * FTP port defaults to * * @return/public static ftpclient getftpclient (
string ftphost, int ftpport, string ftpusername, String ftppassword) {ftpclient ftpclient = null;
try {ftpclient = new ftpclient (); Ftpclient.connect (Ftphost, FtpPort);//Connect FTP server Ftpclient.login (FtpUserName, FTPPassword);//Login FTP server if (! Ftpreply.ispositivecompletion (Ftpclient.getreplycode ())) {Logger.info ("Not connected to FTP, user name or password error.")
");
Ftpclient.disconnect (); else {logger.info ("FTP connection succeeded.")
");
} catch (SocketException e) {e.printstacktrace (); Logger.info ("FTP IP address may be wrong, please configure correctly.")
");
catch (IOException e) {e.printstacktrace (); Logger.info ("FTP port error, please configure correctly.")
");
return ftpclient; /** * Download files from FTP server * * @param ftphost FTP IP Address * * @param ftpusername FTP user name * * @param ftppassword F TP Username Password * * @param ftpport FTP Port * * @param ftppath FTP Server file path format: FTPTEST/AA * * * @param localpath Download to thisLocation Format: h:/download * * @param filename File name */public static void Downloadftpfile (String ftphost, String Ftpusern Ame, string ftppassword, int ftpport, string ftppath, String localpath, String fileName) {FtpClient ftpclient = nul
L
try {ftpclient = getftpclient (Ftphost, FtpPort, FtpUserName, FTPPassword); Sets the type of upload file to be binary type if (Ftpreply.ispositivecompletion (Ftpclient.sendcommand ("OPTS UTF8", "on")) {//Turn on server support for UTF-8.
If server support is encoded with UTF-8, the local encoding (GBK) is used.
Local_charset = "UTF-8";
} ftpclient.setcontrolencoding (Local_charset); Ftpclient.enterlocalpassivemode ()//Set Passive mode Ftpclient.setfiletype FTP. Binary_file_type)//Set the transmission mode//upload file//To the Chinese file name for transcoding, otherwise the Chinese name of the file download failed String filenametemp = new String (filename.getbyte
S (local_charset), server_charset);
Ftpclient.changeworkingdirectory (Ftppath);
InputStream Retrievefilestream = Ftpclient.retrievefilestream (filenametemp); The first way to download files (recommended)/* File LocalFile = new file (LocalPath + file.sEparatorchar + fileName);
OutputStream OS = new FileOutputStream (localfile); Ftpclient.retrievefile (fileName, OS); Os.close ();//The second way to download: the input stream into bytes, and then generate files, this way to facilitate the return of the byte array directly to the foreground JSP page byte[] input2byte = Input2byte (retrievefilestr
EAM);
Byte2file (Input2byte, LocalPath, fileName);
if (null!= retrievefilestream) {retrievefilestream.close ();
The catch (FileNotFoundException e) {logger.error ("not found" + Ftppath + "file");
E.printstacktrace ();
catch (SocketException e) {logger.error ("Connection FTP failed.");
E.printstacktrace ();
catch (IOException e) {e.printstacktrace (); Logger.error ("file read error.")
");
E.printstacktrace ();
finally {if (ftpclient.isconnected ()) {try {//Exit login ftpclient.logout ();
Close connection Ftpclient.disconnect (); catch (IOException e) {}}}}/** * Description: Uploading files to FTP server * * @param host * FTP server H Ostname * @param port * FTP server ports * @param userName * FTP login account * @param password * FTP login password * @param basepath * FTP Server base directory * PARAM filePath * FTP server file storage path. For example, date of deposit:/2015/01/01. The file path is Basepath+filepath * @param filename * uploaded to the FTP server file name * @param input stream * @return Returns true successfully, otherwise returns false */public static Boolean UploadFile (string ftphost, int ftpport, string ftpusername, String FTPPASSW
Ord, String basepath, String filePath, string filename, InputStream input) {Boolean result = false;
FtpClient ftpclient = null;
try {int reply;
FtpClient = Getftpclient (Ftphost, FtpPort, FtpUserName, FTPPassword);
Reply = Ftpclient.getreplycode (); if (!
Ftpreply.ispositivecompletion (Reply)) {ftpclient.disconnect ();
return result; //Switch to upload directory if (!ftpclient.changeworkingdirectory (BasePath + filePath)) {//If directory does not exist create directory string[] dirs = fi
Lepath.split ("/");
String TempPath = BasePath;
for (String dir:dirs) { if (null = Dir | |
". Equals (dir)) continue;
TempPath + = "/" + dir;
if (!ftpclient.changeworkingdirectory (TempPath)) {if (!ftpclient.makedirectory (TempPath)) {return result;
else {ftpclient.changeworkingdirectory (TempPath); The type of upload file is binary type if (Ftpreply.ispositivecompletion (Ftpclient.sendcommand ("OPTS UTF8", "on"))
{//Turn on server support for UTF-8, if server support is encoded with UTF-8, use local encoding (GBK).
Local_charset = "UTF-8";
} ftpclient.setcontrolencoding (Local_charset); Ftpclient.enterlocalpassivemode ()//Set Passive mode Ftpclient.setfiletype FTP.
Binary_file_type)//Set the transmission mode//upload file filename = new String (Filename.getbytes (Local_charset), server_charset);
if (!ftpclient.storefile (filename, input)) {return result;
} if (null!= input) {input.close ();
result = true;
catch (IOException e) {e.printstacktrace (); finally {if (ftpclient.isconnected ()) {try {//exit login FTpclient.logout ();
Close connection Ftpclient.disconnect ();
The catch (IOException IoE) {}} return result; /** * Delete File not tested * * @param hostname * FTP server address * @param port * FTP Server port number * @param
Username * FTP Login account * @param password * FTP login password * @param pathname * FTP Server Save directory * @param filename * Name of the file to be deleted * @return/public static Boolean DeleteFile (String ftphost, int ftpport,
String FtpUserName, String FTPPassword, String pathname, String filename) {Boolean flag = false;
FtpClient ftpclient = new FtpClient ();
try {ftpclient = getftpclient (Ftphost, FtpPort, FtpUserName, FTPPassword);
Verify that the FTP server is logged on successfully int replycode = Ftpclient.getreplycode (); if (!
Ftpreply.ispositivecompletion (Replycode)) {return flag;
}//Toggle FTP directory Ftpclient.changeworkingdirectory (pathname); Sets the type of upload file to be binary type if (Ftpreply.ispositivecompletion (Ftpclient.sendcommand) ("OPTS UTF8 "," on ")) {//Turn on server support for UTF-8, use local encoding (GBK) if server support is encoded with UTF-8.
Local_charset = "UTF-8";
} ftpclient.setcontrolencoding (Local_charset); Ftpclient.enterlocalpassivemode ()//Set Passive mode Ftpclient.setfiletype FTP.
Binary_file_type)//Set the transmission mode//to the Chinese name for transcoding filename = new String (Filename.getbytes (Local_charset), server_charset);
Ftpclient.dele (filename);
Flag = true;
catch (Exception e) {e.printstacktrace ();
finally {if (ftpclient.isconnected ()) {try {//Exit login ftpclient.logout ();
Close connection Ftpclient.disconnect ();
The catch (IOException e) {}}} return flag;
///Convert byte array to input stream public static final InputStream byte2input (byte[] buf) {return new Bytearrayinputstream (BUF); }///Convert input to byte[] public static final byte[] Input2byte (InputStream instream) throws IOException {Bytearrayoutputstr
EAM swapstream = new Bytearrayoutputstream ();
byte[] buff = new byte[100];
int rc = 0; while (rc = Instream.reaD (Buff, 0, m)) > 0) {swapstream.write (buff, 0, RC);
} byte[] in2b = Swapstream.tobytearray ();
return in2b; Convert byte[to file public static void Byte2file (byte[] buf, String filePath, String fileName) {Bufferedoutputstream bo
s = null;
FileOutputStream fos = null;
File file = null;
try {file Dir = new File (FilePath);
if (!dir.exists () && dir.isdirectory ()) {dir.mkdirs ());
File = new File (FilePath + file.separator + fileName);
FOS = new FileOutputStream (file);
BOS = new Bufferedoutputstream (FOS);
Bos.write (BUF);
catch (Exception e) {e.printstacktrace ();
Finally {if (Bos!= null) {try {bos.close ();
catch (IOException e) {e.printstacktrace ();
} if (fos!= null) {try {fos.close ();
catch (IOException e) {e.printstacktrace (); }
}
}
}
}
Test class:
Import Java.io.File;
Import Java.io.FileInputStream;
Import java.io.FileNotFoundException;
Import Cn.ftp.util.FtpUtil;
public class Ftpmain {public static void main (string[] args) throws FileNotFoundException {//ftp server IP address
String ftphost = "10.18.17.190";
FTP server port int ftpport = 21;
FTP Server user name String ftpusername = "AA";
FTP server password String ftppassword = "57GHV2MH";
FTP server path String ftppath = "ftpdir/";
Local path String localpath = "e://";
filename String filename = "2.docx"; Download//download files from FTP root directory to e disk//Ftputil.downloadftpfile (Ftphost, FtpUserName, FTPPassword, FtpPort, Ftppath, loc
Alpath, FileName);
Upload//upload e-disk files to the FTP root directory/*fileinputstream in=new fileinputstream (New file ("e:/" + fileName); Ftputil.uploadfile (Ftphost, FtpPort, FtpUserName, FTPPassword, "ftpdir/", "/", fileName, in);*//delete//delete files under FTP root directory Ftputil.deletefile (ftphost, FtpPort, FtpUserName, FTPPassword, "ft
pdir/"," 2.docx "); }
}
Project Download Address: http://download.csdn.net/download/ljj2312/10187480