`

sun.net.ftp.FtpClient

阅读更多
package classTest;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;

public class FtpOperation {
	private FtpClient client = new FtpClient();
	
	/**
	 * 登录FTP,并返回登录是否成功的Boolean值
	 * @param host
	 * @param port
	 * @param user
	 * @param password
	 * @return
	 */
	public boolean login(String host, int port, String user, String password) {
		boolean flag = true;
		try {
			client.openServer(host, port);
			client.login(user, password);
		} catch (IOException e) {
			e.printStackTrace();
			flag = false;
		}
		return flag;
	}
	/**
	 * 关闭FTP连接
	 */
	public void close() {
		if(client.serverIsOpen()) {
			try {
				client.closeServer();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 在父级节点创建子节点目录,如果父级节点为根节点parent可以为空或“/”
	 * @param parent
	 * @param path
	 * @return
	 */
	public boolean makeDir(String parent, String path) {
		boolean flag = true;
		flag = cdAssignPath(parent);
		if(flag) {
			try {
				//创建已经存在的目录会报错
				client.sendServer("MKD " + path + "\r\n");
			}catch (Exception e) {
				e.printStackTrace();
				flag = false;
			}
		}
		return flag;
	}
	
	/**
	 * 上传文件
	 * @param path保存FTP位置
	 * @param file要上传的文件
	 * @param remoteName在FTP保存时的名字
	 */
	public void upload(String path, File file, String remoteName) {
		TelnetOutputStream write = null;
		FileInputStream read = null;
		byte[] by = new byte[1024];
		try {
			if(cdAssignPath(path)) {
				read = new FileInputStream(file);
				write = client.put(remoteName);
				while(read.read(by) != -1) {
					write.write(by);
				}
			}
		}catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (read != null) {
				try {
					read.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (write != null) {
				try {
					write.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	 * 下载文件
	 * @param remotePath
	 * @param remoteName
	 * @param localPath
	 * @param localName
	 */
	public void download(String remotePath, String remoteName, String localPath, String localName) {
		byte[] by = new byte[1024];
		if(cdAssignPath(remotePath)) {
			try {
				TelnetInputStream read = client.get(remoteName);
				File file = new File(localPath);
				if(!file.exists()) {
					file.mkdirs();
				}
				FileOutputStream write = new FileOutputStream(new File(localPath + "/" + localName));
				while(read.read(by) > 0) {
					write.write(by);
				}
				read.close();
				write.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 获取指定路径下的文件列表
	 * @param path
	 * @return
	 */
	public List<String> ls(String path) {
		List<String> list = new ArrayList<String>();
		if(cdAssignPath(path)) {
			String line = "";
			BufferedReader ls;
			try {
				ls = new BufferedReader(new InputStreamReader(client.list()));
				while((line = ls.readLine()) != null) {
					//文件列表显示格式:-rw-r--r-- 1 ftp ftp              4 Jul 02 17:23 zqz.txt
					String[] array = line.split(" ");
					list.add(array[array.length -1]);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println(list);
		return list;
	}
	/**
	 * 切换当前目录当根目录
	 */
	private void cdRoot() {
		try {
			while(!"/".equals(client.pwd())) {
				client.cdUp();
			}
			System.out.println(client.pwd());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 切换当前目录到指定路径,该路径必须从根路径开始
	 * @param path
	 * @return
	 */
	public boolean cdAssignPath(String path) {
		boolean flag = true;
		cdRoot();
		try {
			client.cd(path);
			System.out.println(client.pwd());
		} catch (IOException e) {
			e.printStackTrace();
			flag = false;
		}
		return flag;
	}
}

 

分享到:
评论

相关推荐

    使用commons.net FTP 和sun.net.ftp.FtpClient 多种方式上传下载(包括批量)删除功能(一)

    3. **设置工作模式**:根据需求,可以切换到二进制或文本模式,使用`FTPClient.setFileType(FTP.BINARY_FILE_TYPE)`或`FTP.ASCII_FILE_TYPE`。 4. **上传文件**:调用`FTPClient.storeFile(String remote, ...

    sun.FtpClient,ftp4j.FTPClient,apache.FTPClient不同的方式操作FTP

    sun.net.ftp.FtpClient,it.sauronsoftware.ftp4j.FTPClient,org.apache.commons.net.ftp.FTPClient三种不同的方式操作FTP

    apache java ftpclient

    删除文件使用`FTPClient.deleteFile()`方法,而删除目录则需先改变到该目录,然后使用`FTPClient.removeDirectory()`。 7. **被动模式与主动模式** FTP的主动模式中,服务器发起数据连接到客户端,而在被动模式下...

    Java实现文件下载并解决中文文件名乱码

    Java实现文件下载并解决中文文件名乱码

    .NET下的FtpClient类

    因为开发一个项目要用到FTP上传功能,用的是.NET平台,当时找了半天也没有关于FTP...找了很多资料,并参考了一下Java的sun.net.FtpClient类,总算可以拿出来用,所以就迫不及待的传上来给大家共享,相对性能方面还可以。

    JAVA程序中FTP的连接以及上传文件

    import sun.net.ftp.FtpClient; public class ftptest { FtpClient ftpClient; private String localfilename; private String remotefilename; static String a = new String(); static int b; static ...

    JAVA FTP实现

    ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 设置文件传输模式为二进制 // 文件上传 File localFile = new File("/path/to/local/file"); ftpClient.storeFile("remote/path", new FileInputStream(local...

    jdk1.7以上专用FTP工具类

    jdk1.7以上专用FTP工具类,本人花了半天时间调试通过,拿来即用,具体用法详见main函数。

    oracle中实现ftp文件上传下载.doc

    在提供的代码示例中,可以看到使用了`sun.net.ftp.FtpClient`类来实现FTP客户端的功能。然而,值得注意的是,`sun.net.ftp.FtpClient`并不是标准的Java API,而是Oracle JRE的一个私有实现,这意味着它可能在不同的...

    FTP源代码例子

    import sun.net.ftp.FtpClient; public class MainCtrl extends HttpServlet { private FtpClient ftpClient; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, ...

    java通过ftp上传下载文件

    TestFtpUpload 为示例工程 依赖的jar 里面都有 倒入到...1. 通过sun :sun.net.ftp.FtpClient 2. 通过apache:org.apache.commons.net.ftp.FTPClient 3. 通过edtftp: com.enterprisedt.net.ftp.FileTransferClient

    java FTP上传

    FTP上传到服务器 非常好用 import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; import java.util.StringTokenizer; import sun.net.ftp.FtpClient; /**

    使用java开发ftp.pdf

    在JBuilder9中,Java提供了`sun.net.ftp.FtpClient`类,它是实现FTP功能的核心。`FtpClient`类包含了一系列方法,使得开发者能够轻松地与FTP服务器交互,例如: 1. `openServer(String hostname)`和`openServer...

    FTP源码JAVA版.pdf

    - `sun.net.ftp.FtpClient`:这是一个内部类,用于处理FTP连接和操作,如登录、改变目录、上传、下载等。 - `TelnetInputStream` 和 `TelnetOutputStream`:与 Telnet 协议相关的输入输出流,可能被用作FTP连接的...

    java实现FTP源代码.pdf

    `FtpClient` 类可能基于`sun.net.ftp.FtpClient` 或第三方库如Apache Commons Net。 2. **Swing组件**:`Frame1` 类继承自`JFrame`,表示一个窗口应用程序。其中包含了许多Swing组件,如`JTextField`(文本框)、`...

    java经典代码

    在这个特定的代码段中,开发者使用了`sun.net.ftp.*`包中的类来实现FTP客户端的功能,这是一个内部使用的非公开API,可能在不同JVM版本中不可用或不稳定。尽管如此,我们仍然可以了解这个例子的基本思路和一般Java ...

    上传下载功能实现.pdf

    在Java中,可以使用`sun.net.ftp.FtpClient`类来实现FTP操作。示例代码展示了如何创建一个FTP连接,登录服务器,并进行基本的文件操作。在实际应用中,需要注意异常处理,确保连接的稳定性和安全性。 在上述的代码...

Global site tag (gtag.js) - Google Analytics