[size=medium][b]1.使用 Serv-U 在本机上创建一个 FTP服务器 http://www.serv-u.com/
2.FTP 登录 下载 上传 文本文件 二进制文件[/b][/size]
2.FTP 登录 下载 上传 文本文件 二进制文件[/b][/size]
package com.itheima.net;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
* 模拟FTP文件传输
* @author Bin
*/
public class TextFTPFileTran{
// 对于导入 sun.net.TelnetInputStream; 报错 是权限不足 myeclise 默认不是使用sun 下面的额工具类 也可以自己建立一个 TelnetInputStream 继承 FilterInputStream 就可以了
// 项目 -->右键 -->property-->Java buil path--->lib-->
// -->jre-system library-->Access rule-->edit-->Add-->Accessible sun/**-->OK
private TelnetInputStream getfile;
private TelnetOutputStream putfile;
private String info;
private FtpClient ftp=null;
private static final String serverIp="192.168.1.111";
private static final String userName="root";
private static final String passwd="123456";
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
/**
* 开始前 Ser-U 已经建立了一个FTP文件服务器 在管理员中 有个root 用户 密码 123456
* 根目录 / = E:\360Downloads (包含:ebj-1.jpg , 123.html, 里面有个 show文件夹)
* 本地目录 F: 包含(getopt.jar ,plant.xml)
*/
String fileName="123.html",fileName1="ebj-1.jpg",destFile="E:/123.html",destFile2="F:/ebj-1.jpg",
upFile="F:/plant.xml",destFile1="plant.xml",
currentDir="show",destFile3="getopt.jar",upFile1="F:/getopt.jar";
TextFTPFileTran text=new TextFTPFileTran();
System.out.println("=================1.登录");
text.loginServer();
System.out.println("=================2.从 E:/360Downloads 下载 123.html");
text.downLoadText(fileName, destFile);
System.out.println("=================3.从 E:/360Downloads 下载 ebj-1.jpg");
text.downLoadBinary(fileName1, destFile2);
System.out.println("=================4.上传F:/plant.xml 到 E:/360Downloads");
text.uploadText(upFile, destFile1);
System.out.println("=================4.上传F:/getopt.jar 到 E:/360Downloads");
text.updateDirUpload(currentDir, destFile3, upFile1);
}
public void loginServer(){
try {
ftp=new FtpClient(serverIp);//与服务器建立连接
} catch (Exception e) {
// TODO: handle exception
System.out.println("不能与指定服务器简历连接:"+e.getMessage());
}
info=ftp.getResponseString(); //获取服务器响应的信息
System.out.println("与FTP服务器进行连接:"+info);
try {
ftp.login(userName, passwd);
} catch (Exception e) {
System.out.println("用户登录失败:"+e.getMessage());
}
info=ftp.getResponseString();// 获取服务器响应信息
System.out.println("登录服务器:"+info);
}
//获取服务器指定 目录下的文件 到本地目录下的文件
public void downLoadText(String fileName,String destFile) throws IOException{
getfile=ftp.get(fileName);
info=ftp.getResponseString(); //获取服务器的响应信息
System.out.println("获取服务器上的"+fileName+"文件:"+info);
ftp.ascii(); //标志要上传下载的文件
info=ftp.getResponseString(); //获取服务器的响应的信息
System.out.println("下载文本文件:"+info);
//创建输入路读取对象
InputStreamReader isr=new InputStreamReader(getfile);
//创建缓冲读取对象
BufferedReader b=new BufferedReader(isr);
//创建 缓冲写对象
BufferedWriter writer=new BufferedWriter(new FileWriter(new File(destFile)));
while(true){
String s=b.readLine();
if(s==null){
break;
}else{
writer.write(s);
}
writer.flush();
writer.newLine();
}
writer.close();
isr.close();
b.close();
getfile.close();
System.out.println("下载文件"+fileName+"到本地"+destFile+"成功");
}
//下载而进制的文件代码
public void downLoadBinary(String fileName,String destFile) throws IOException{
ftp.binary(); //标志 上传下载 二进制的文件
info=ftp.getResponseString();// 获取响应信息
System.out.println("下载二进制文件:"+info);
getfile=ftp.get(fileName);
info=ftp.getResponseString();// 获取响应信息
System.out.println("获取FTP服务器上的"+fileName+"文件:"+info);
FileOutputStream output=new FileOutputStream(new File(destFile));
while(true){
int i=getfile.read();
if(i==-1){
break;
}else{
output.write((byte)i);
output.flush();
}
}
getfile.close();
output.close();
System.out.println("下载二进制文件"+fileName+"文件到本地:"+destFile);
}
public void uploadText(String upFile,String destFile) throws IOException{
ftp.ascii(); //标致 要上传下载文件
info=ftp.getResponseString();// 获取响应信息
System.out.println("上传文本文件:"+info);
putfile=ftp.put(destFile);
info=ftp.getResponseString();// 获取响应信息
System.out.println("设置上传到FTP服务器上的"+upFile+"文件:"+info);
//创建缓冲读对象
BufferedReader fis=new BufferedReader(new FileReader(upFile));
//创建缓冲写对象
BufferedWriter fos=new BufferedWriter(new OutputStreamWriter(putfile));
while(true){
String i=fis.readLine();
if(i==null)
break;
else{
fos.write(i); //写入文件中
fos.flush(); //刷新 只有刷新才能写入文件成功
fos.newLine();// 换行
}
}
putfile.close();
fis.close();
fos.close();
System.out.println("上传本地"+upFile+"文件到FTP服务器成功,路径为:"+destFile);
}
//更改FTP制定目录并且上传文件
public void updateDirUpload(String currentDir,String destFile,String upFile) throws IOException{
TelnetInputStream in=null;
try {
in=ftp.list(); //获取当前目录列表
} catch (Exception e) {
System.out.println("无法获取目录列表:"+e.getMessage());
}
info=ftp.getResponseString(); //获取服务器响应信息
System.out.println("获取当前目录列表:"+info);
try {
int ch;
StringBuffer buf=new StringBuffer();
in=ftp.list();//得到主机端当前目录下的所有文件和目录输入数据流
while ((ch=in.read())>=0) {
buf.append((char)ch);
}
in.close();
System.out.println(buf);
}catch (Exception e) {
System.out.println("读取目录列表的信息:"+e.getMessage());
}
System.out.println("---"+info);
try {
ftp.cd(currentDir); //改变当前目录进入show目录下
} catch (Exception e) {
System.out.println("无法改变当前目录:"+e.getMessage());
}
info=ftp.getResponseString();
System.out.println("改变当前"+currentDir+"目录:"+info);
ftp.binary();// 上传下载二进制文件的标致
putfile=ftp.put(destFile);// 设置上传的文件名
info=ftp.getResponseString();
System.out.println("上传到FTP服务器的文件名为:"+destFile+"信息"+info);
//创建文件输入流
FileInputStream fs=new FileInputStream(upFile);
while(true){
int i=fs.read(); //读取Html文件
if(i==-1)
break;
else{
putfile.write((byte)i); //按字节写入文件中
putfile.flush(); //刷新后才能写入成功!
}
}
putfile.close();
fs.close();
System.out.println("本地文件"+upFile+"上传到FTP服务网上的"+currentDir+"目录下的"+destFile);
}
}