网页素材: 导航菜单选项卡滑动门焦点图图片切换下拉菜单弹出层Tabs链接提示

您的当前位置: 源码爱好者 » 网页制作教程(编程教程) » Java技术教程

Java中实现FTP上传下载文件的功能,完整代码

  • 标签:上传文件 FTP  更新时间:2014-02-07
  • 一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上穿件文件夹、检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码:

    package ftpDemo;
    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import sun.net.TelnetInputStream;
    import sun.net.TelnetOutputStream;
    import sun.net.ftp.FtpClient;
    public class ftpUtil {
    // 上传文件至FTP通用方法
    public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
    	try {
    		String ftpHost = kmConfig.getFtpHost();
    		int port = kmConfig.getFtpPort();
    		String userName = kmConfig.getFtpUser();
    		String passWord = kmConfig.getFtpPassword();
    		String path = kmConfig.getFtpPath();
    		FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
    		ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
    		ftpClient.binary();
    		ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
    		TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName为上传的文件名
    		DataOutputStream dataOut = new DataOutputStream(telnetOut);
    		byte buffer[] = new byte[1024 * 1024];
    		int count = 0;
    		while ((count = is.read(buffer)) != -1) {
    			dataOut.write(buffer, 0, count);
    		}
    		telnetOut.close();
    		dataOut.close();
    		ftpClient.closeServer();
    	} catch (Exception e) {
    		System.out.println("上传文件失败!请检查系统FTP设置,并确认FTP服务启动");
    	}
    }
    // 删除文件至FTP通用方法
    public static void deleteFileFtp(KmConfig kmConfig,String fileName){
    	try {
    		String ftpHost = kmConfig.getFtpHost();
    		int port = kmConfig.getFtpPort();
    		String userName = kmConfig.getFtpUser();
    		String passWord = kmConfig.getFtpPassword();
    		String path = kmConfig.getFtpPath();
    		FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
    		ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
    		ftpClient.binary();
    		ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
    		try {
    			ftpClient.sendServer("dele " + fileName + "\r\n");
    		} catch (Exception e) {
    			System.out.println("删除文件失败!请检查系统FTP设置,并确认FTP服务启动");
    		}
    		ftpClient.closeServer();
    	} catch (Exception e) {
    		System.out.println("删除文件失败!");
    	}
    }
    // 下载ftp文件
    public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
    	try {
    		String ftpHost = kmConfig.getFtpHost();
    		int port = kmConfig.getFtpPort();
    		String userName = kmConfig.getFtpUser();
    		String passWord = kmConfig.getFtpPassword();
    		String path = kmConfig.getFtpPath();
    		FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
    		ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
    		ftpClient.binary();
    		ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
    		try {
    			TelnetInputStream in = ftpClient.get(fileName);
    			byte[] bytes = new byte[1024];
    			int cnt=0;
    			while ((cnt=in.read(bytes,0,bytes.length)) != -1) {
    				outputStream.write(bytes, 0, cnt);
    			}
    			outputStream.close();
    			in.close();
    		} catch (Exception e) {
    			ftpClient.closeServer();
    			e.printStackTrace();
    		}
    		ftpClient.closeServer();
    	} catch (Exception e) {
    		System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");
    	}
    }
    //在ftp服务器上传件文件夹
        public boolean createDir(String path,FtpClient ftpClient) throws Exception{
    			//进入到home文件夹下
                ftpClient.cd("/home");
                //创建远程文件夹
               //远程命令包括
               //USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT<br>
    //          PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS<br>
    //          ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH<br>
    //          REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ<br>
    //          QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT<br>
    //               在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br>
    //                    ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br>
    //                    ftpclient.readServerResponse一定要在sendServer后调用<br>
    //                    nameList("/test")获取指目录下的文件列表<br>
    //                    XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
    //                    XRMD删除目录<br>
    //                    DELE删除文件<br>
           //通过远程命令 穿件一个files文件夹
            ftpClient.sendServer("MKD "+ path + "\r\n");
            //这个方法必须在 这两个方法中间调用 否则 命令不管用
            ftpClient.binary();
            ftpClient.readServerResponse();
            return false;
        }
    /**
      * 检查文件夹是否存在
      * @param dir
      * @param ftpClient
      * @return
      */
    	public boolean isDirExist(String dir, FtpClient ftpClient) {
    	 	 try {
    	   		ftpClient.cd(dir);
    	  	} catch (Exception e) {
    	   		return false;
    	  	}
     	 	return true;
    	}
    }

    KmConfig.java代码如下:定义FTP服务器参数,包括登录的用户名密码之类的。

    package ftpDemo;
    public class KmConfig {
    	//主机ip
    	private String FtpHost = "";
    	//端口号
    	private int FtpPort;
    	//ftp用户名
    	private String FtpUser = "";
    	//ftp密码
    	private String FtpPassword = "";
    	//ftp中的目录
    	private String FtpPath = "";
    	public String getFtpHost() {
    		return FtpHost;
    	}
    	public void setFtpHost(String ftpHost) {
    		FtpHost = ftpHost;
    	}
    	public int getFtpPort() {
    		return FtpPort;
    	}
    	public void setFtpPort(int ftpPort) {
    		FtpPort = ftpPort;
    	}
    	public String getFtpUser() {
    		return FtpUser;
    	}
    	public void setFtpUser(String ftpUser) {
    		FtpUser = ftpUser;
    	}
    	public String getFtpPassword() {
    		return FtpPassword;
    	}
    	public void setFtpPassword(String ftpPassword) {
    		FtpPassword = ftpPassword;
    	}
    	public String getFtpPath() {
    		return FtpPath;
    	}
    	public void setFtpPath(String ftpPath) {
    		FtpPath = ftpPath;
    	}
    }

    下面是测试代码:

    package ftpDemo;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    public class Test {
    	public static void main(String[] args) {
    		//设置ftp
    		KmConfig km = new KmConfig();
    		km.setFtpHost("172.20.32.48");
    		km.setFtpPort(21);
    		km.setFtpUser("test");
    		km.setFtpPassword("111111");
    		km.setFtpPath("KM");
    		//上传到ftp
    		ftpUtil util=new ftpUtil();
    		File file = new File("F:/文章2.jpg");
    		InputStream in;
    		try {
    			in = new FileInputStream(file);
    			util.upLoadFileFtp(km, in, "更改后的名字.jpg");
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

    测试使用:页面访问: ftp://账户:密码@ip地址:端口号/文件夹目录, ftp://test:111111@222.22.22.11:21/image/

  • 已读: 次 收藏本文关闭本文打印本文复制链接
处理 SSI 文件时出错