目录
1、操作前准备
(1)什么是FTP协议
FTP(File Transfer Protocol):是应用层的一个文件传输协议 。主要作用是在服务器和客户端之间实现文件的传输和共享。FTP协议运行在TCP连接上,保证了文件传输的可靠性。在传输时,传输双方的操作系统、磁盘文件系统类型可以不同。
(2)Java如何实现文件传输
导入commons-net-3.6.jar包,获取基于FTP协议封装好的类库。
(3)下载ftp服务器
下载压缩包:
解压后运行:蓝色小鱼
成功运行:
点击蓝色小人:第一个选项创建新用户
注:主目即你要进行传输操作的磁盘地址。权限按需选择。
完成后,可用浏览器根据主机IP及Web服务端口进入,并输入用户名及密码进入
可以看到主目中存在的文件:
说明我们的服务器正常运行。
2、Java代码案例解析
即不使用浏览器,使用Java代码创建客户端对象进行操作。
(1)获取当前目录中所有文件信息
第一步 创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
第二步 连接ftp服务器并验证那用户名和密码(模拟登录)
ftpClient.connect("192.168.254.185",21);//进入服务
ftpClient.login("admin", "1234");//信息验证
第三步 进行需要的操作
在准备阶段,我们从浏览器中可以看到文件的各个属性。
FTPFile[] ftpFilelist = ftpClient.listFiles();//将获取的列表信息存储在FTPFile数组内
//进行遍历打印
for(FTPFile file : ftpFilelist) {
System.out.println("文件名称:" + file.getName());
System.out.println("文件大小:" + file.getSize() + "字节");
System.out.println("文件创建时间:" + file.getTimestamp());
}
部分运行结果如下:
我们可以看到,中文乱码及创建时间复杂输出,所以我们需要进行数据处理。
将名称存入字符串处理
String fileName = file.getName();
fileName = new String(fileName.getBytes("iso-8859-1"),"gb2312");//处理格式记住就好
System.out.println("文件名称:" + fileName);
将创建时间进行处理
SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月 dd日");//设置格式
Date createDate = file.getTimestamp().getTime();
System.out.println("文件创建时间:" + fmt.format(createDate));
部分运行结果如下:
(2)切换目录即文件夹
//aaa为需要切换的目录名(切换到子目录需要)
boolean Ischange = ftpClient.changeWorkingDirectory("aaa");
boolean Ischange = ftpClient.changeToParentDirectory();//返回至上一级目录
返回值时布尔类型,所以当切换的目录不存在时,需要创建目录
ftpClient.makeDirectory("aaa");//aaa为目录名
创建成功会在主目录中显示
(3)向目标目录传输文件
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
//创建读取上传文件的输入流
try (FileInputStream in = new FileInputStream("C:\\Users\\GAN\\Desktop\\1\\薛之谦.jpg")){
//连接ftp服务器并验证那用户名和密码
ftpClient.connect("192.168.254.185",21);
ftpClient.login("admin", "1234");
//切换目录
boolean Ischange = ftpClient.changeWorkingDirectory("aaa");
//如果目标不存在
if(!Ischange) {
//创建个人目录
ftpClient.makeDirectory("aaa");
//切换至个人目录
ftpClient.changeWorkingDirectory("aaa");
}
//文件上传
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
//存至服务器
//参数1:FTP文件的保存名称
//参数2:本地文件输入流
//System.currentTimeMillis()通过时间命名
boolean isStore = ftpClient.storeFile(System.currentTimeMillis() + ".jpg", in);
System.out.println("文件上传成功?" + isStore);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
运行结果:
(4)从目标目录中下载指定文件
//创建基于FTP协议访问文件服务器的客户端对象
FTPClient ftpClient = new FTPClient();
//下载文件需要的输出流
try (FileOutputStream out = new FileOutputStream("C:\\Users\\GAN\\Desktop\\1\\" + System.currentTimeMillis() + ".jpg")){
//连接ftp服务器并验证那用户名和密码
ftpClient.connect("192.168.254.185",21);
ftpClient.login("admin", "1234");
//切换目录
boolean Ischange = ftpClient.changeWorkingDirectory("aaa");
System.out.println(Ischange);
//文件下载
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型二进制文件
//参数1:指定文件名称
//参数2:下载需要的输出流
boolean isRetrieve = ftpClient.retrieveFile("1.jpg", out);
System.out.println("文件下载成功?" + isRetrieve);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
运行结果:
总结:
1、FTP协议是一种应用层的文件传输协议。
2、Java可通过commons-net-3.6.jar包进行文件传输操作
3、文件传输的主要步骤有(1)创建基于FTP协议访问文件服务器的客户端对象
(2)连接ftp服务器并验证那用户名和密码(模拟登录)
4、可进行的部分操作(1)显示目录内文件信息
(2)切换目录,并创建新目录。
(3)将文件上传至指定目录
(4)从目标目录下载指定文件