import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @khj
* @title FtpUtils
* @Description : FTP 上传下载工具类
* @time
*/
public class FTPUtils
{
/**
* 日志
*/
private static Logger logger = LoggerFactory.getLogger(FTPUtils.class);
private static FTPClient ftp;
/**
* 连接ftp <一句话功能简述> <功能详细描述>
*
* @param addr
* @param port
* @param username
* @param password
* @return
* @see [类、类#方法、类#成员]
*/
public static boolean connect(String addr, int port, String username, String password)
{
ftp = new FTPClient();
try
{
ftp.connect(addr, 21);
ftp.login(username, password);
}
catch (SocketException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return ftp.isConnected();
}
@SuppressWarnings("unused")
private void upload(File file, String path)
{
logger.info(" file.isDirectory() : {}" + file.isDirectory());
try
{
if (file.isDirectory())
{
ftp.makeDirectory(file.getName());
ftp.changeWorkingDirectory(file.getName());
String[] files = file.list();
for (int i = 0; i < files.length; i++)
{
File file1 = new File(file.getPath() + "\" + files[i]);
if (file1.isDirectory())
{
upload(file1, path);
ftp.changeToParentDirectory();
}
else
{
File file2 = new File(file.getPath() + "\" + files[i]);
FileInputStream input = new FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
}
else
{
File file2 = new File(file.getPath());
System.out.println(" file.getPath() : " + file.getPath() + " | file2.getName() : " + file2.getName());
InputStream input = new FileInputStream(file2);
ftp.changeWorkingDirectory(path);
ftp.storeFile(file2.getName(), input);
input.close(); // 关闭输入流
ftp.logout(); // 退出连接
}
}
catch (Exception e)
{
logger.error(e.getMessage());
}
}
@SuppressWarnings("static-access")
public static byte[] downloadFile(String fileName)
{
byte[] bytes = null;
try
{
ftp.changeWorkingDirectory("");
// 列出该目录下所有文件
FTPFile[] fs = ftp.listFiles(fileName);
// 遍历所有文件,找到指定的文件
for (FTPFile file : fs)
{
if (file.getName().equals(fileName))
{
// 根据绝对路径初始化文件
// File localFile = new File(localPath);
// if (!localFile.exists())
// {
// localFile.createNewFile();
// }
// // 输出流
// OutputStream os = new FileOutputStream(localFile);
InputStream in = null;
// 下载文件
ftp.setBufferSize(1024);
ftp.setControlEncoding("UTF-8");
ftp.setFileType(ftp.BINARY_FILE_TYPE);
// 下载文件到 localFile
// ftp.retrieveFile(ff.getName(), os);
String remoteAbsoluteFile = file.getName();
remoteAbsoluteFile = new String(remoteAbsoluteFile.getBytes("UTF-8"), "ISO-8859-1");
in = ftp.retrieveFileStream(remoteAbsoluteFile);
bytes = input2byte(in);
System.out.println("下载成功!" + bytes.length);
in.close();
}
}
ftp.logout(); // 退出连接
}
catch (Exception e)
{
e.printStackTrace();
}
return bytes;
}
/**
* byte[] 转 file
*
* @param bytes
* @param path
* @return
* @see [类、类#方法、类#成员]
*/
public static void byteToFile(byte[] bytes, String path)
{
try
{
// 根据绝对路径初始化文件
File localFile = new File(path);
if (!localFile.exists())
{
localFile.createNewFile();
}
// 输出流
OutputStream os = new FileOutputStream(localFile);
os.write(bytes);
os.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 文件转成 byte[] <一句话功能简述> <功能详细描述>
*
* @param inStream
* @return
* @throws IOException
* @see [类、类#方法、类#成员]
*/
public static byte[] input2byte(InputStream inStream)
throws IOException
{
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = inStream.read(buff, 0, 100)) > 0)
{
swapStream.write(buff, 0, rc);
}
byte[] in2b = swapStream.toByteArray();
swapStream.close();
return in2b;
}
public static void getPhoto(String filePath,String localPath)
{
FTPUtils.connect(ReadPropertiesUtils.getParamValue("ftp.host"),
21,
ReadPropertiesUtils.getParamValue("ftp.username"),
ReadPropertiesUtils.getParamValue("ftp.password"));
logger.info("");
byte[] bytes = FTPUtils.downloadFile(filePath);
FTPUtils.byteToFile(bytes, localPath);
}
public static byte[] getPhoto(String filePath)
{
FTPUtils.connect(ReadPropertiesUtils.getParamValue("ftp.host"),
21,
ReadPropertiesUtils.getParamValue("ftp.username"),
ReadPropertiesUtils.getParamValue("ftp.password"));
logger.info("");
byte[] bytes = FTPUtils.downloadFile(filePath);
//FTPUtils.byteToFile(bytes, localPath);
return bytes;
}
public static void main(String[] args)
throws Exception
{
String filePath = "T_ZDRY_IDX_JXXX_INC/010020090902731604.jpg";
String localPath = "d:\ccc.jpg";
FTPUtils.getPhoto(filePath, localPath);
}
}