FTP 上传 下载 登录

1.使用 Serv-U 在本机上创建一个 FTP服务器   http://www.serv-u.com/
2.FTP 登录 下载 上传 文本文件 二进制文件


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);
		
	}
	
	


}


你可能感兴趣的:(FTP 登录 下载 上传 文件)