目录
引言
首先,基于FTP服务器的各种文件操作,我们需明白,什么是FTP?
查阅资料,FTP是用于计算机网络上客户端和服务器之间进行文件传输的应用层协议。FTP客户首先建立一个与FTP服务器端口号21的TCP控制连接,指定TCP作为传输层协议,客户在建立的控制连接上获得身份认证,以便后续操作。
一、启动简单FTP服务器
下载 easyFTP-server,启动.exe程序
你可以新注册(设置用户名、密码)用户、设置主目录并设置该用户的权限。
此时须记住自己本地的主机IP以及你所创建的用户名、密码。
一切操作进行的前题:创建FTP客户端对象并进行连接主机IP,然后登录(输入用户名及密码)。
FTPClient ftpclient=new FTPClient();
ftpclient.connect("192.168.xxx.x");// 主机IP
ftpclient.login("xxxx","xxxxxxxx");//用户名,密码
二、文件列表显示
1.显示当前主目录下的文件列表
登录成功后,想显示当前主目录下的文件列表,可以通过所创建的FTP客户端对象ftpclient的listFiles()方法直接获取当前目录列表,然后设置格式输出你想要输出的对应内容即可。
该方法返回的是一个FTPFile对象数组。
//获取当前目录列表
FTPFile[] lists=ftpclient.listFiles();
//创建简单日期格式对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
//遍历列表
for(FTPFile f:lists) {
//解决中文乱码问题
String filename=f.getName();
filename=new String(filename.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称:"+filename);
System.out.println("文件大小:"+f.getSize()+"字节");
Date date=f.getTimestamp().getTime();
System.out.println("文件创建时间:"+sdf.format(date));//按照所创建的日期格式对象输出创建时间
System.out.println();
}
2.显示当前目录的子目录下的文件列表
与上面不同的是,需要利用创建的ftpclient对象的changeWorkingDirectory()方法切换到子目录下
//切换到新创建的
ftpclient.changeWorkingDirectory("xun")
然后再继续获取当前目录列表,最后输出。
//获取当前目录列表
FTPFile[] lists=ftpclient.listFiles();
//创建简单日期格式对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
//遍历列表
for(FTPFile f:lists) {
//解决中文乱码问题
String filename=f.getName();
filename=new String(filename.getBytes("iso-8859-1"),"gb2312");
System.out.println("文件名称:"+filename);
System.out.println("文件大小:"+f.getSize()+"字节");
Date date=f.getTimestamp().getTime();
System.out.println("文件创建时间:"+sdf.format(date));//按照所创建的日期格式对象输出创建时间
System.out.println();
}
3.创建新目录
如果想创建新目录,FTPClient提供了makeDirectory()方法
//创建
ftpclient.makeDirectory("xun");
三、文件上传
文件上传,是将本地文件从当前计算机拷贝至远程主机上。
首先,我们要创建读取本地文件的字节输入流 fis:
//创建本地输入流
FileInputStream fis=new FileInputStream("C:\\Users\\xxx\\Pictures\\哆啦a梦.jpg");//路径
切换到你想要上传的目录下,进行文件上传。
文件上传的方法是storeFile(String remote,InputStream local),第一个参数为上传后的名字即格式,第二个参数为本地的字节输入流对象。
//切换到子目录
boolean change=ftp.changeWorkingDirectory("lxz");
if(change) {//子目录存在
ftp.setFileType(ftp.BINARY_FILE_TYPE);//设置文件类型
//文件上传
boolean is=ftp.storeFile(System.currentTimeMillis()+".jpg", fis);
System.out.println("文件上传成功?"+is);
//关闭
fis.close();
}else {//目录不存在,则创建该目录
ftp.makeDirectory("lxz");
}
上传成功后,记得关闭输入流。
四、文件下载
文件下载,即将远程主机上的文件拷贝到当前计算机上。
首先,切换到你所要下载的文件所在的目录下:
boolean is=ftp.changeWorkingDirectory("xun");
然后创建文件字节输出流 fos:
文件下载的方法时retrieveFile(String remote,OutputStream local),第一个参数传入所要下载的文件名称,第二个参数时下载的字节输出流对象。
if(is) { //创建文件输出流 FileOutputStream fos=new FileOutputStream("C:\\Users\\寻玉萌 \\Pictures\\Camera Roll\\哈哈.jpg"); ftp.setFileType(ftp.BINARY_FILE_TYPE);//设置文件类型 //下载 boolean isdownload=ftp.retrieveFile("1.jpg", fos); System.out.println("文件下载成功?"+isdownload); } //关闭连接 ftp.disconnect();
同样,记得关闭输出流。
总结
1.文件的显示可以显示不同目录下的文件列表
2.文件的上传下载均需要设置文件的类型
3.创建输入、输出流记得要关闭。