一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上传文件夹、检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,
(1):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[ * ]
int count =
while ((count = is.read(buffer)) != -) {
dataOut.write(buffer, , 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[]
int cnt=
while ((cnt=in.read(bytes,,bytes.length)) != -) {
outputStream.write(bytes, , 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
}
}
(2):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
}
}
(3):下面是测试代码:
呵呵,这个很简单,用java File 类即可实现主要代码如下:
File file=new File("E:\\java\\3.jpg") //具体文件路径(可以从数据库里面读取出来)
if(file.isFile()){
file.delete()//这是主要的操作
}
import java.io.InputStreamimport java.io.PrintStream
import org.apache.commons.net.telnet.TelnetClient
/**
* 利用apache net 开源包,使用telnet方式获取AIX主机信息
* @version 1.2
*/
public class NetTelnet {
// Telnet对象
private TelnetClient telnet = new TelnetClient()
private InputStream in
private PrintStream out
// 提示符。具体请telnet到AIX主机查看
private char prompt = '#'
// telnet端口
private String port
// 用户
private String user
// 密码
private String password
// IP地址
private String ip
public NetTelnet() {
try {
// AIX主机IP
this.ip = "219.243.12.10"
this.password = "05933663007"
this.user = "administrator"
this.port = "23"
telnet.connect(ip, Integer.parseInt(port))
System.out.println("开始获取输入流...")
in = telnet.getInputStream()
out = new PrintStream(telnet.getOutputStream())
// 登录
/* readUntil("login: ")
write(user)
readUntil("Password: ")
write(password)
readUntil(prompt + " ")*/
} catch (Exception e) {
e.printStackTrace()
}
}
/**
* 读取分析结果
*
* @param pattern
* @return
*/
public String readUntil(String pattern) {
try {
char lastChar = pattern.charAt(pattern.length() - 1)
StringBuffer sb = new StringBuffer()
char ch = (char) in.read()
while (true) {
sb.append(ch)
if (ch == lastChar) {
if (sb.toString().endsWith(pattern)) {
return sb.toString()
}
}
ch = (char) in.read()
}
} catch (Exception e) {
e.printStackTrace()
}
return null
}
/**
* 写
*
* @param value
*/
public void write(String value) {
try {
out.println(value)
out.flush()
} catch (Exception e) {
e.printStackTrace()
}
}
/**
* 向目标发送命令字符串
*
* @param command
* @return
*/
public String sendCommand(String command) {
try {
write(command)// 执行删除的命令 rm -rf *.*
return readUntil(prompt + " ")
} catch (Exception e) {
e.printStackTrace()
}
return null
}
/**
* 关闭连接
*
*/
public void disconnect() {
try {
telnet.disconnect()
} catch (Exception e) {
e.printStackTrace()
}
}
public static void main(String[] args) {
try {
System.out.println("开始执行telnet......")
NetTelnet telnet = new NetTelnet()
// 通过aix的命令“查找主机名称”获取数据
// 命令是 "hostname"
// 不熟悉命令的参考<<AIX网络管理手册>>
System.out.println("开始发送hostname命令")
String result = telnet.sendCommand("hostname")
System.out.println("显示结果")
System.out.println(result)
// 最后一定要关闭
telnet.disconnect()
} catch (Exception e) {
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)