‘壹’ 怎样实现远端ftp服务器上的文件剪切,粘贴操作
你有FTPClient就比较好办,假如你的两台FTP服务器分别为fs1和fs2在本地开发代码思路如下:
通过FTPClient连接上fs1,然后下载(可以循环批量下载)到本地服务器,保存到一个临时目录。
下载完成后,FTPClient断开与fs1的连接,记得必须logout。
本地服务器通过FileInputStream将刚下载到临时目录的文件读进来,得到一个List<File>集合。
通过FTPClient连接上fs2,循环List<File>集合,将文件上传至fs2的特定目录,然后清空临时目录,上传完毕后,断开fs2的连接,同样必须logout。
‘贰’ java ftp
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import sun.net.ftp.FtpClient;
/**
*
* @author chenc
* @version 1.0
*
* 2008-02-19
*
*/
public class Ftp {
private String ip = "";
private String username = "";
private String password = "";
private String ftpDir = "";
private String localFileFullName = "";// 待上传的文件全名
private String ftpFileName = ""; // 文件上传到FTP后的名称
FtpClient ftpClient = null;
OutputStream os = null;
FileInputStream is = null;
public Ftp(String serverIP, String username, String password, String ftpDir) {
this.ip = serverIP;
this.username = username;
this.password = password;
if (ftpDir == null) {
this.ftpDir = "/ftpfileload";
} else {
try {
this.ftpDir = "/"
+ new String(ftpDir.getBytes("ISO-8859-1"), "GBK")
.toString();
} catch (UnsupportedEncodingException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
private void createDir(String dir, FtpClient ftpClient) {
System.out.println(this.ftpDir);
ftpClient.sendServer("MKD " + dir + "\r\n");
try {
ftpClient.readServerResponse();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
private Boolean isDirExist(String dir, FtpClient ftpClient) {
try {
ftpClient.cd(dir);
} catch (Exception e) {
// TODO 自动生成 catch 块
return false;
}
return true;
}
public String upload(String localFileFullName) {
// this.ftpFileName = "aaa.test";
// 获取文件后缀名
String ext = localFileFullName.substring(localFileFullName
.lastIndexOf("."));
// System.out.println(ext);
// 产生新文件名,用系统当前时间+文件原有后缀名
long newFileName = System.currentTimeMillis();
String newFileFullName = newFileName + ext;
// System.out.println("new file name:"+newFileFullName);
this.ftpFileName = newFileFullName;
try {
String savefilename = new String(localFileFullName
.getBytes("ISO-8859-1"), "GBK");
// 新建一个FTP客户端连接
ftpClient = new FtpClient();
ftpClient.openServer(this.ip);
ftpClient.login(this.username, this.password);
// 判断并创建目录
if (!isDirExist(this.ftpDir, ftpClient)) {
createDir(this.ftpDir, ftpClient);
}
ftpClient.cd(this.ftpDir);// 切换到FTP目录
ftpClient.binary();
os = ftpClient.put(this.ftpFileName);
// 打开本地待长传的文件
File file_in = new File(savefilename);
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
// 开始复制
int c;
// 暂未考虑中途终止的情况
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("Exception e in Ftp upload(): " + e.toString());
} finally {
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpClient != null) {
ftpClient.closeServer();
}
} catch (Exception e) {
System.err.println("Exception e in Ftp upload() finally"
+ e.toString());
}
}
return this.ftpFileName;
}
public void delFile(String dir, String filename) {
ftpClient = new FtpClient();
try {
ftpClient.openServer(this.ip);
ftpClient.login(this.username, this.password);
if (dir.length() > 0) {
ftpClient.cd(dir);
}
ftpClient.sendServer("DELE " + filename + "\r\n");
ftpClient.readServerResponse();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
我写的一个FTP类,你看看你能不能用。。。。。
‘叁’ JAVA怎么实现删除远程FTP服务器上的某一文件
一个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 + " ");
} 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 + " ");
//这个方法必须在 这两个方法中间调用 否则 命令不管用
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的ftp操作方法有哪几种
FTP(File Transfer Protocol)是 Internet 上用来传送文件的协议(文件传输协议)。它是为了我们能够在 Internet 上互相传送文件而制定的的文件传送标准,规定了 Internet 上文件如何传送。也就是说,通过 FTP 协议,我们就可以跟 Internet 上的 FTP 服务器进行文件的上传(Upload)或下载(Download)等动作。
和其他 Internet 应用一样,FTP 也是依赖于客户程序/服务器关系的概念。在 Internet 上有一些网站,它们依照 FTP 协议提供服务,让网友们进行文件的存取,这些网站就是 FTP 服务器。网上的用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,通常 Windows 都有“ftp”命令,这实际就是一个命令行的 FTP 客户程序,另外常用的 FTP 客户程序还有 CuteFTP、Ws_FTP、FTP Explorer等。
要连上 FTP 服务器(即“登陆”),必须要有该 FTP 服务器的帐号。如果是该服务器主机的注册客户,你将会有一个 FTP 登陆帐号和密码,就凭这个帐号密码连上该服务器。但 Internet 上有很大一部分 FTP 服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,因此,不要求用户事先在该服务器进行登记注册。
Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”和“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Emai1地址作为口令,以便更好地对访问进行跟综。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载(download)文件,而不允许上载(upload)文件。也就是说,用户只能从匿名FTP主机拷贝需要的文件而不能把文件拷贝到匿名FTP主机。另外,匿名FTP主机还采用了其他一些保护措施以保护自己的文件不至于被用户修改和删除,并防止计算机病毒的侵入。在具有图形用户界面的 WorldWild Web环境于1995年开始普及以前,匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名PTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息,数据和软件。 人们只要知道特定信息资源的主机地址, 就可以用匿名FTP登录获取所需的信息资料。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,但是匿名FTP仍是 Internet上传输分发软件的一种基本方法
‘伍’ JAVA_JSCH如何远程操作SFTP服务器上的文件
使用SSH协议进行FTP传输的协议叫SFTP
换言之你的SSH协议一定启用了,那么使用基本linux命令在远端执行即可。
我个人而言,JSCH一般是这样用的:SFTP用于单纯的文件上传,之后直接使用基础ssh协议执行远端linux命令(比如说,移动文件或是重启服务器等等)
至于API的具体使用方式,稍微搜索一下很容易找到,比如这个:
http://blog.csdn.net/allen_zhao_2012/article/details/7941631
‘陆’ 高分求大神解答,java 操作FTP的问题
检查你自己的代码,确定ftp有读权限,如果实在不行,网上找段代码,参照重新写一个试试,有时候自己写的代码小小的错误很难发现。
‘柒’ 用java实现ftp侧压缩文件的解压
我们在开发项目的时候,特别是B/S系统,经常会遇到要批量上传文件的需求,对此需求一般有如下几个解决方案(以B/S为例):1. 在客户端提供文件上传接口,一次上传一个文件2. 一次上传多个文件3. 将需要上传的文件打包,一次上传到服务器,并自动解压到指定目录1,2方法都有几个很明显的不足,用户工作量大,文件如果过大,在网络环境中,上传的效率低下,另外文件在不同的目录,是无法进行一次选择上传的.所以打包上传就成为了比较流行的批量文件上传的解决方案,下面就来一起讨论一下在java中如何实现: 主要功能需求: a. 上传文件,将文件保存在服务器 b. 读取服务器上压缩文件,解压到指定目录 下面就这两个需求说说编码实现上传: 使用了smartupload开源程序 参考链接: http://hi..com/liuzy84/blog/item/556318f4fad1cc6fddc4741a.html
‘捌’ 用java实现ftp侧压缩文件的解压
你这个问题有点怪,首先你要在服务器解压缩的话,你有服务器的Java程序执行权限吗?如果有的话可以考虑,在服务器做Java对Ftp文件夹的文件监控,发现压缩包自动调用解压缩代码解压,如果没有服务器执行权限,那你就不用考虑这个问题了
‘玖’ java中怎么实现ftp服务器
我知道apache有个commons net包,其中的FTPClient类可以实现客户端和服务之间的文件传输,但是我如果使用这种方式的话,就得将一台服务器上的文件传到我本地,再将这个文件传到另一台服务器上,感觉这中间多了一步操作;
‘拾’ 如何用Java实现文件列表
用递归实现。
1. import java.io.File;
2. import java.io.FileFilter;
3. import java.io.FilenameFilter;
4.
5. /**
6. * 文件列表。<br>
7. * 可以指定过滤条件。
8. *
9. * @author leo
10. *
11. */
12. public class FileList {
13.
14. /**
15. * @param args
16. */
17. public static void main(String[] args) {
18. File dir = new File(".");
19.
20. // 所有的文件和目录名
21. String[] children = dir.list();
22. if (children == null) {
23. // 不存在或者不是目录
24. } else {
25. System.out.println("#### 1 ####");
26. for (int i = 0; i < children.length; i++) {
27. // 文件名
28. System.out.println(children[i]);
29. }
30. }
31.
32. // 可以指定返回文件列表的过滤条件
33. // 这个例子不返回那些以.开头的文件名
34. FilenameFilter filter = new FilenameFilter() {
35. public boolean accept(File dir, String name) {
36. return !name.startsWith(".");
37. }
38. };
39. children = dir.list(filter);
40. System.out.println("#### 2 ####");
41. for (int i = 0; i < children.length; i++) {
42. // 文件名
43. System.out.println(children[i]);
44. }
45.
46. // 也可以拿到文件对象的列表
47. File[] files = dir.listFiles();
48. System.out.println("#### 3 ####");
49. for (int i = 0; i < files.length; i++) {
50. // 文件名
51. System.out.println(files[i].getName());
52. }
53.
54. // 下面这个过滤条件只返回目录
55. FileFilter fileFilter = new FileFilter() {
56. public boolean accept(File file) {
57. return file.isDirectory();
58. }
59. };
60. files = dir.listFiles(fileFilter);
61. System.out.println("#### 4 ####");
62. for (int i = 0; i < files.length; i++) {
63. // 文件名
64. System.out.println(files[i].getName());
65. }
66.
67. }
68.
69. }