1、FTP简介:
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和\"上传\"(Upload)。\"下载\"文件就是从远程主机拷贝文件至自己的计算机上;\"上传\"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
通过JDK自带的API实现,需要导入java-ftp.jar包。
有服务器端:
2、连接FTP的服务器端。
代码如下:
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient client = new FTPClient();
try {
//连接ftp服务器并验证用户名密码
client.connect("192.168.0.113", 21);
client.login("LMY", "123456");
//切换目录
boolean ischange = client.changeWorkingDirectory("lmy");
if(ischange) {
//如果切换目录的有,获取当前目录中的所有文件
FTPFile[] files = client.listFiles();
//格式化时间
SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日");
for (FTPFile ftpFile : files) {
//文件名中包含中文乱码
String name = ftpFile.getName();
name = new String(name.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称"+name);
System.out.println("文件大小"+ftpFile.getSize()+"字节");
Date date = ftpFile.getTimestamp().getTime();
System.out.println("文件创建时间"+fmt.format(date));
}
}else {
//切换目录不成功,创建目录"lmy"
boolean is = client.makeDirectory("lmy");
System.out.println(is);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
try {
client.disconnect();//关闭连接
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
3、 上传文件至服务器
FTPClient client = new FTPClient();
try(InputStream in = new FileInputStream("D:\\niuma\\bao.jpg")) {
client.connect("192.168.0.113", 21);
client.login("LMY", "123456");
boolean isChange = client.changeWorkingDirectory("cbx");
if(!isChange) {
client.makeDirectory("cbx");
client.changeWorkingDirectory("cbx");
}
//设置文件类型,
client.setFileType(FTPClient.BINARY_FILE_TYPE);
//文件上传
//参数1:文件名称
//参数2:输入流
boolean is = client.storeFile("cbx.jpg",in);
System.out.println(is);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
4、从服务器下载
FTPClient client = new FTPClient();
try (OutputStream out = new FileOutputStream("D:\\niuma\\niuma\\bb.jpg")){
//连接
client.connect("192.168.254.128", 21);
//登录
client.login("LMY", "123456");
//选择文件夹
client.changeWorkingDirectory("cbx");
client.setFileType(FTPClient.BINARY_FILE_TYPE);
//下载
boolean is = client.retrieveFile("cbx.jpg", out);
System.out.println(is);
} catch (SocketException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
try {
client.disconnect();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}