001 |
import java.io.DataInputStream;
|
002 |
import java.io.File;
|
003 |
import java.io.FileInputStream;
|
004 |
import java.io.FileOutputStream;
|
005 |
import java.io.IOException;
|
006 |
import java.util.ArrayList;
|
007 |
import java.util.List;
|
008 |
009 |
import org.apache.catalina.tribes.util.Logs;
|
010 |
011 |
import sun.net.TelnetInputStream;
|
012 |
import sun.net.TelnetOutputStream;
|
013 |
import sun.net.ftp.FtpClient;
|
014 |
015 |
public class DownFileForFtp {
|
016 |
FtpClient ftpClient;
|
017 |
private String server = "ip" ;
|
018 |
private int port = 21 ;
|
019 |
private String userName = "usn" ;
|
020 |
private String userPassword = "pwd" ;
|
021 |
022 |
/**
|
023 |
* 链接到服务器
|
024 |
*
|
025 |
* @return
|
026 |
*/
|
027 |
public boolean open() {
|
028 |
if (ftpClient != null && ftpClient.serverIsOpen())
|
029 |
return true ;
|
030 |
try {
|
031 |
ftpClient = new FtpClient();
|
032 |
ftpClient.openServer(server, port);
|
033 |
ftpClient.login(userName, userPassword);
|
034 |
ftpClient.binary();
|
035 |
return true ;
|
036 |
} catch (Exception e) {
|
037 |
e.printStackTrace();
|
038 |
ftpClient = null ;
|
039 |
return false ;
|
040 |
}
|
041 |
}
|
042 |
043 |
public boolean cd(String dir) {
|
044 |
boolean f = false ;
|
045 |
try {
|
046 |
ftpClient.cd(dir);
|
047 |
} catch (IOException e) {
|
048 |
//Logs.error(e.toString());
|
049 |
return f;
|
050 |
}
|
051 |
return true ;
|
052 |
}
|
053 |
054 |
/**
|
055 |
* 上传文件到FTP服务器
|
056 |
*
|
057 |
* @param localPathAndFileName
|
058 |
* 本地文件目录和文件名
|
059 |
* @param ftpFileName
|
060 |
* 上传后的文件名
|
061 |
* @param ftpDirectory
|
062 |
* FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录
|
063 |
* @throws Exception
|
064 |
*/
|
065 |
public boolean upload(String localDirectoryAndFileName, String ftpFileName,
|
066 |
String ftpDirectory) throws Exception {
|
067 |
if (!open())
|
068 |
return false ;
|
069 |
FileInputStream is = null ;
|
070 |
TelnetOutputStream os = null ;
|
071 |
try {
|
072 |
char ch = ' ' ;
|
073 |
if (ftpDirectory.length() > 0 )
|
074 |
ch = ftpDirectory.charAt(ftpDirectory.length() - 1 );
|
075 |
for (; ch == '/' || ch == '\\' ; ch = ftpDirectory
|
076 |
.charAt(ftpDirectory.length() - 1 ))
|
077 |
ftpDirectory = ftpDirectory.substring( 0 ,
|
078 |
ftpDirectory.length() - 1 );
|
079 |
080 |
int slashIndex = ftpDirectory.indexOf( 47 );
|
081 |
int backslashIndex = ftpDirectory.indexOf( 92 );
|
082 |
int index = slashIndex;
|
083 |
String dirall = ftpDirectory;
|
084 |
if (backslashIndex != - 1 && (index == - 1 || index > backslashIndex))
|
085 |
index = backslashIndex;
|
086 |
String directory = "" ;
|
087 |
while (index != - 1 ) {
|
088 |
if (index > 0 ) {
|
089 |
String dir = dirall.substring( 0 , index);
|
090 |
directory = directory + "/" + dir;
|
091 |
ftpClient.sendServer( "XMKD " + directory + "\r\n" );
|
092 |
ftpClient.readServerResponse();
|
093 |
}
|
094 |
dirall = dirall.substring(index + 1 );
|
095 |
slashIndex = dirall.indexOf( 47 );
|
096 |
backslashIndex = dirall.indexOf( 92 );
|
097 |
index = slashIndex;
|
098 |
if (backslashIndex != - 1
|
099 |
&& (index == - 1 || index > backslashIndex))
|
100 |
index = backslashIndex;
|
101 |
}
|
102 |
ftpClient.sendServer( "XMKD " + ftpDirectory + "\r\n" );
|
103 |
ftpClient.readServerResponse();
|
104 |
105 |
os = ftpClient.put(ftpDirectory + "/" + ftpFileName);
|
106 |
File file_in = new File(localDirectoryAndFileName);
|
107 |
is = new FileInputStream(file_in);
|
108 |
byte bytes[] = new byte [ 1024 ];
|
109 |
int i;
|
110 |
while ((i = is.read(bytes)) != - 1 )
|
111 |
os.write(bytes, 0 , i);
|
112 |
// 清理垃圾
|
113 |
114 |
return true ;
|
115 |
} catch (Exception e) {
|
116 |
e.printStackTrace();
|
117 |
return false ;
|
118 |
} finally {
|
119 |
if (is != null )
|
120 |
is.close();
|
121 |
if (os != null )
|
122 |
os.close();
|
123 |
}
|
124 |
}
|
125 |
126 |
/**
|
127 |
* 从FTP服务器上下载文件并返回下载文件长度
|
128 |
*
|
129 |
* @param ftpDirectoryAndFileName
|
130 |
* @param localDirectoryAndFileName
|
131 |
* @return
|
132 |
* @throws Exception
|
133 |
*/
|
134 |
public long download(String ftpDirectoryAndFileName,
|
135 |
String localDirectoryAndFileName) throws Exception {
|
136 |
long result = 0 ;
|
137 |
if (!open())
|
138 |
return result;
|
139 |
TelnetInputStream is = null ;
|
140 |
FileOutputStream os = null ;
|
141 |
try {
|
142 |
is = ftpClient.get(ftpDirectoryAndFileName);
|
143 |
java.io.File outfile = new java.io.File(localDirectoryAndFileName);
|
144 |
os = new FileOutputStream(outfile);
|
145 |
byte [] bytes = new byte [ 1024 ];
|
146 |
int c;
|
147 |
while ((c = is.read(bytes)) != - 1 ) {
|
148 |
os.write(bytes, 0 , c);
|
149 |
result = result + c;
|
150 |
}
|
151 |
} catch (Exception e) {
|
152 |
throw e;
|
153 |
} finally {
|
154 |
if (is != null )
|
155 |
is.close();
|
156 |
if (os != null )
|
157 |
os.close();
|
158 |
159 |
}
|
160 |
return result;
|
161 |
}
|
162 |
163 |
/**
|
164 |
* 返回FTP目录下的文件列表
|
165 |
*
|
166 |
* @param ftpDirectory
|
167 |
* @return
|
168 |
*/
|
169 |
public List<String> getFileNameList(String ftpDirectory) {
|
170 |
List<String> list = new ArrayList<String>();
|
171 |
if (!open())
|
172 |
return list;
|
173 |
try {
|
174 |
DataInputStream dis = new DataInputStream(
|
175 |
ftpClient.nameList(ftpDirectory));
|
176 |
String filename = "" ;
|
177 |
while ((filename = dis.readLine()) != null ) {
|
178 |
list.add(filename);
|
179 |
System.out.println(filename);
|
180 |
}
|
181 |
} catch (Exception e) {
|
182 |
e.printStackTrace();
|
183 |
}
|
184 |
return list;
|
185 |
}
|
186 |
187 |
/**
|
188 |
* 删除FTP上的文件
|
189 |
*
|
190 |
* @param ftpDirAndFileName
|
191 |
*/
|
192 |
public boolean deleteFile(String ftpDirAndFileName) {
|
193 |
if (!open())
|
194 |
return false ;
|
195 |
ftpClient.sendServer( "DELE " + ftpDirAndFileName + "\r\n" );
|
196 |
return true ;
|
197 |
}
|
198 |
199 |
/**
|
200 |
* 删除FTP目录
|
201 |
*
|
202 |
* @param ftpDirectory
|
203 |
*/
|
204 |
public boolean deleteDirectory(String ftpDirectory) {
|
205 |
if (!open())
|
206 |
return false ;
|
207 |
ftpClient.sendServer( "XRMD " + ftpDirectory + "\r\n" );
|
208 |
return true ;
|
209 |
}
|
210 |
211 |
/**
|
212 |
* 关闭链接
|
213 |
*/
|
214 |
public void close() {
|
215 |
try {
|
216 |
if (ftpClient != null && ftpClient.serverIsOpen())
|
217 |
ftpClient.closeServer();
|
218 |
} catch (Exception e) {
|
219 |
220 |
}
|
221 |
}
|
222 |
|
223 |
public static void main(String []args) throws Exception{
|
224 |
DownFileForFtp df = new DownFileForFtp();
|
225 |
df.getFileNameList( "E:\\uploadfiles\\cat" );
|
226 |
df.download( "E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml" , "F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml" );
|
227 |
228 |
}
|
229 |
|
230 |
} |
相关推荐
通过Java实现FTP批量下载文件以及解压的功能,可以极大地提高工作效率,特别是在处理大量数据时。以下是一份详细的步骤介绍: 首先,我们需要引入Java的FTP客户端库,如Apache Commons Net库。这个库提供了丰富的...
Java解析FTP服务器文本文件是指使用Java语言连接FTP服务器,上传、下载、递归目录遍历等基本操作的集合。在这个过程中,我们需要引入相关的jar包,例如cpdetector.jar、jchardet-1.0.jar、antlr.jar、commons-...
本文档将详细介绍一个基于Java的实用工具类`FtpClientUtil`,该类提供了一系列功能来与FTP服务器交互,包括连接到服务器、上传文件、下载文件、获取文件列表、删除文件和目录以及关闭连接等操作。 #### 二、`...
**文件下载** 下载文件则是通过`retrieveFile`方法,同样需要提供远程文件路径和一个本地文件流来接收数据。 ```java OutputStream fos = new FileOutputStream("localSavePath"); ftpClient.retrieveFile(...
首先,FTP上传和下载是Java中常见的任务,通常通过`java.net.Socket`或`java.net.URL`类来实现,但更常见的是使用`org.apache.commons.net.ftp`库,这个库提供了FTPClient类,简化了FTP操作。例如,你可以创建一个...
* Description: FTP文件下载功能 * @Version 1.0 Jul 27, 2008 5:32:36 PM by cuihongbao@d-heaven.com * @param url FTP服务器地址 * @param port FTP服务器端口号 * @param username FTP用户名 * @param ...
Java 实现 FTP 自动上传文件是一项常见的任务,尤其在自动化部署、数据同步...总的来说,通过Java实现FTP自动上传文件涉及到网络通信、文件操作、日志处理等多个方面,理解这些概念对于Java开发者来说是非常重要的。
### 用Java实现FTP批量大文件上传下载的关键技术与实现 #### 一、引言 在当前互联网技术的发展中,文件传输是不可或缺的一部分。尤其是在工程建设项目中,常常需要跨地域的大规模文件交换。传统的HTTP传输方式虽然...
在Java编程环境中,实现从FTP(File Transfer Protocol)服务器上按照其目录结构创建本地文件夹并下载文件是一项常见的任务。FTP是一种用于在网络上传输文件的标准协议,它允许用户从远程服务器上获取或发送文件。本...
总结,Java实现FTP上传和下载需要借助Apache Commons Net库,通过FTPClient类进行操作。同时,如果涉及XML文件,还需要理解并应用DOM、SAX或StAX解析技术。在实现过程中,要注意文件流的管理和异常处理,确保操作的...
在FTP中,这可以通过`storeFile()`方法实现,将本地文件上传到FTP服务器的一个新位置。 5. **读写CSV文件**: Java标准库中的`BufferedReader`和`BufferedWriter`可以用于读写CSV文件。读取时,逐行读取文件,按...
通过以上步骤,我们可以利用Java的FTPClient类实现FTP批量大文件的上传和下载。对于数据量大的情况,这种自动化和批量化的处理方式大大提高了工作效率和系统稳定性。记住,实际开发中还需要根据具体需求进行调整和...
例如,你可以通过`connect()`方法建立连接,`login()`方法进行登录,`changeWorkingDirectory()`方法切换目录,`listFiles()`获取目录下的文件列表,`retrieveFile()`下载文件。 5. 文件最后修改时间判断: 在Java...
4. **下载文件夹**:由于FTP协议不直接支持下载整个目录,我们需要遍历目录下的所有文件和子目录,递归地下载每个文件。这需要自己实现一个递归函数。 5. **验证SHA256校验和**:下载完成后,为了确认文件完整性,...
根据给定的信息,本文将详细解释如何使用Java与Apache Commons Net和IO库通过FTP协议上传和下载文件。这里会深入探讨代码实现、配置以及常见问题处理等知识点。 ### Java FTP 文件上传与下载 #### 一、环境搭建与...
1. 递归上传/下载目录:可以遍历本地目录,逐个上传或下载文件。 2. 断点续传:如果文件较大,可以记录已传输的部分,在下次连接时继续上传或下载。 3. 多线程上传/下载:通过多线程同时处理多个文件,提高传输效率...