java 获取ftp 文件路径_java在浏览器上获取FTP读文件路径

展开全部

问一下,你是62616964757a686964616fe4b893e5b19e31333337623437想做ftp上传下载么?

首先你需要安装一个ftp服务端程序,启动起来,然后下载一个ftp客户端程序,测试能不能连接,首先这一块儿需要测试通过。

代码ftp上传下载

2.1 上传代码:

import java.io.File;

import java.io.FileInputStream;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;

public class test {

private FTPClient ftp;

/**

*

* @param path 上传到ftp服务器哪个路径下

* @param addr 地址

* @param port 端口号

* @param username 用户名

* @param password 密码

* @return

* @throws Exception

*/

private boolean connect(String path,String addr,int port,String username,String password) throws Exception {

boolean result = false;

ftp = new FTPClient();

int reply;

ftp.connect(addr,port);

ftp.login(username,password);

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

return result;

}

ftp.changeWorkingDirectory(path);

result = true;

return result;

}

/**

*

* @param file 上传的文件或文件夹

* @throws Exception

*/

private void upload(File file) throws Exception{

if(file.isDirectory()){

ftp.makeDirectory(file.getName());

ftp.changeWorkingDirectory(file.getName());

String[] files = file.list();

for (int i = 0; i < files.length; i++) {

File file1 = new File(file.getPath()+"\\"+files[i] );

if(file1.isDirectory()){

upload(file1);

ftp.changeToParentDirectory();

}else{

File file2 = new File(file.getPath()+"\\"+files[i]);

FileInputStream input = new FileInputStream(file2);

ftp.storeFile(file2.getName(), input);

input.close();

}

}

}else{

File file2 = new File(file.getPath());

FileInputStream input = new FileInputStream(file2);

ftp.storeFile(file2.getName(), input);

input.close();

}

}

public static void main(String[] args) throws Exception{

test t = new test();

t.connect("", "localhost", 21, "yhh", "yhhazr");

File file = new File("e:\\uploadify");

t.upload(file);

}

}

2.2 下载代码

这里没有用到filter,如果用filter就可以过滤想要的文件。

public class Ftp {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Ftp ftp = new Ftp();

String hostname = "www.strawberry.com";

Integer port = 21;

String username = "username";

String password = "password";

String remote = "/c.txt";

String local = "/home/tin/LeonChen/FTP/";

try {

ftp.connect(hostname, port, username, password);

System.out.println("接收状态:"+ftp.download(remote, local));

ftp.disconnect();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private FTPClient ftpClient = new FTPClient();

/*

* * 连接到FTP服务器

* * @param hostname 主机名

* * @param port 端口

* * @param username 用户名

* * @param password 密码

* * @return 是否连接成功

* * @throws IOException

*/

private boolean connect(String hostname, int port, String username,

String password) throws IOException {

ftpClient.connect(hostname, port);

ftpClient.setControlEncoding("UTF-8");

if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {

if (ftpClient.login(username, password)) {

return true;

}

}

disconnect();

return false;

}

/*

* 从FTP服务器上下载文件,支持断点续传,上传百分比汇报

*

* @param remote 远程文件路径

*

* @param local 本地文件路径

*

* @return 上传的状态

*

* @throws IOException

*/

public DownloadStatus download(String remote, String local)

throws IOException {

// 设置被动模式

ftpClient.enterLocalPassiveMode();

// 设置以二进制方式传输

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

DownloadStatus result;

// 检查远程文件是否存在

FTPFile[] files = ftpClient.listFiles(new String(remote

.getBytes("UTF-8"), "iso-8859-1"));

if (files.length != 1) {

System.out.println("远程文件不存在");

return DownloadStatus.Remote_File_Noexist;

}

long lRemoteSize = files[0].getSize();

String fildName = files[0].getName();

// 本地存在文件,进行断点下载

File f = new File(local+fildName);

if (f.exists()) {

long localSize = f.length();

if (localSize >= lRemoteSize) {

System.out.println("本地文件大于远程文件,下载中止");

return DownloadStatus.Local_Bigger_Remote;

}

// 进行断点续传,并记录状态

FileOutputStream out = new FileOutputStream(f, true);

ftpClient.setRestartOffset(localSize);

InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1"));

byte[] bytes = new byte[1024];

long step = lRemoteSize / 100;

long process = localSize / step;

int c;

while ((c = in.read(bytes)) != -1) {

out.write(bytes, 0, c);

localSize += c;

long nowProcess = localSize / step;

if (nowProcess > process) {

process = nowProcess;

if (process % 10 == 0)

System.out.println("下载进度:" + process);

// TODO 更新文件下载进度,值存放在process变量中

}

}

in.close();

out.close();

boolean isDo = ftpClient.completePendingCommand();

if (isDo) {

result = DownloadStatus.Download_From_Break_Success;

} else {

result = DownloadStatus.Download_From_Break_Failed;

}

} else {

OutputStream out = new FileOutputStream(f);

InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1"));

byte[] bytes = new byte[1024];

long step = lRemoteSize / 100;

long process = 0;

long localSize = 0L;

int c;

while ((c = in.read(bytes)) != -1) {

out.write(bytes, 0, c);

localSize += c;

long nowProcess = localSize / step;

if (nowProcess > process) {

process = nowProcess;

if (process % 10 == 0)

System.out.println("下载进度:" + process);

// TODO 更新文件下载进度,值存放在process变量中

}

}

in.close();

out.close();

boolean upNewStatus = ftpClient.completePendingCommand();

if (upNewStatus) {

result = DownloadStatus.Download_New_Success;

} else {

result = DownloadStatus.Download_New_Failed;

}

}

return result;

}

private void disconnect() throws IOException {

if (ftpClient.isConnected()) {

ftpClient.disconnect();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值