问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 实现ftp上传如何创建文件夹?

发布网友 发布时间:2022-05-06 08:59

我来回答

5个回答

热心网友 时间:2022-06-29 05:09

准备条件:java实现ftp上传用到了commons-net-3.3.jar包

首先建立ftphost连接

public boolean connect(String path, String addr, int port, String username, String password) {
try {
//FTPClient ftp = new FTPHTTPClient(addr, port, username, password);
ftp = new FTPClient();
int reply;
ftp.connect(addr);
System.out.println("连接到:" + addr + ":" + port);
System.out.print(ftp.getReplyString());
reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP目标服务器积极拒绝.");
System.exit(1);
return false;
}else{
ftp.login(username, password);
ftp.enterLocalPassiveMode();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.changeWorkingDirectory(path);
System.out.println("已连接:" + addr + ":" + port);
return true;
}
} catch (Exception ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
return false;
}
}

然后再利用ftpclient的makeDirectory方法创建文件夹

public void createDir(String dirname){
try{
ftp.makeDirectory(dirname);
System.out.println("在目标服务器上成功建立了文件夹: " + dirname);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}

断开host连接

public void disconnect(){
try {
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}

最后是程序的调用方法

public static void main(String[] args) {
FtpUploadTest ftpupload = new FtpUploadTest();
if(ftpupload.connect("", "172.39.8.x", 20, "administrator", "abc@123")){
ftpupload.createDir("/UPLOAD");
ftpupload.disconnect();
}
}

热心网友 时间:2022-06-29 05:09

这个功能我也刚写完,不过我也是得益于同行,现在我也把自己的分享给大家,希望能对大家有所帮助,因为自己的项目不涉及到创建文件夹,也仅作分享,不喜勿喷谢谢!

interface :
package com.sunline.bank.ftputil;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import org.apache.commons.net.ftp.FTPClient;

public interface IFtpUtils {
/**
  * ftp登录
  * @param hostname  主机名
  * @param port 端口号
  * @param username 用户名
  * @param password 密码
  * @return
  */
public  FTPClient loginFtp(String hostname,Integer port,String username,String password);
/**
  * 上穿文件
  * @param hostname 主机名
  * @param port 端口号
  * @param username 用户名
  * @param password 密码
  * @param fpath ftp路径
  * @param localpath  本地路径
  * @param fileName 文件名
  * @return
  */
public boolean uploadLocalFilesToFtp(String hostname,Integer port,String username,String password,String fpath,String localpath,String fileName);
/**
* 批量下载文件
* @param hostname
* @param port
* @param username
* @param password
* @param fpath
* @param localpath
* @param fileName 源文件名
* @param filenames 需要修改成的文件名
* @return
*/
public boolean downloadFileList(String hostname,Integer port,String username,String password,String fpath,String localpath,String fileName, String filenames);
/**
  * 修改文件名
  * @param localpath
  * @param fileName 源文件名
  * @param filenames 需要修改的文件名
  */
public void modifiedLocalFileName(String localpath,String fileName, String filenames);
/**
* 关闭流连接、ftp连接
* @param ftpClient
* @param bufferRead 
* @param buffer
*/
public void closeFtpConnection(FTPClient ftpClient,BufferedOutputStream bufferRead,BufferedInputStream buffer);
}

impl:
package com.sunline.bank.ftputil;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import common.Logger;

public class FtpUtilsImpl implements IFtpUtils{
private static Logger log = Logger.getLogger(FtpUtilsImpl.class);
FTPClient ftpClient = null;
Integer reply = null;

@Override
public  FTPClient loginFtp(String hostname,Integer port,String username,String password) {
 ftpClient = new FTPClient();
try {
ftpClient.connect(hostname, port);
ftpClient.login(username, password);
ftpClient.setControlEncoding("utf-8");
reply = ftpClient.getReplyCode();
ftpClient.setDataTimeout(60000);
ftpClient.setConnectTimeout(60000);
//设置文件类型为二进制(避免解压缩文件失败)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//开通数据端口传输数据,避免阻塞
ftpClient.enterLocalActiveMode();
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
log.error("连接FTP失败,用户名或密码错误");
}else{
log.info("FTP连接成功");
}
} catch (Exception e) {
if (!FTPReply.isPositiveCompletion(reply)) {
try {
ftpClient.disconnect();
} catch (IOException e1) {
log.error("登录FTP失败,请检查FTP相关配置信息是否正确",e1);
}
}
}
return ftpClient;
}

@Override
@SuppressWarnings("resource")
public boolean uploadLocalFilesToFtp(String hostname,Integer port,String username,String password,String fpath,String localpath,String fileName) {
boolean flag = false;
ftpClient = loginFtp(hostname, port, username, password);
BufferedInputStream buffer=null;
try {
buffer = new BufferedInputStream(new FileInputStream(localpath + fileName));
ftpClient.changeWorkingDirectory(fpath);
fileName = new String(fileName.getBytes("utf-8"),ftpClient.DEFAULT_CONTROL_ENCODING);
if (!ftpClient.storeFile(fileName, buffer)) {
log.error("上传失败");
return flag;
}
buffer.close();
ftpClient.logout();
flag = true;
return flag;
} catch (Exception e) {
e.printStackTrace();
}finally{
closeFtpConnection(ftpClient, null,buffer);
log.info("文件上传成功");
}
return false;
}

@Override
public boolean downloadFileList(String hostname,Integer port,String username,String password,String fpath,String localpath,String fileName, String filenames){
ftpClient = loginFtp(hostname, port, username, password);
boolean flag = false;
         BufferedOutputStream bufferRead=null;
if(fpath.startsWith("/") && fpath.endsWith("/")){
try {
//切换到当前目录
this.ftpClient.changeWorkingDirectory(fpath);
this.ftpClient.enterLocalActiveMode();
FTPFile [] ftpFiles = this.ftpClient.listFiles();
for (FTPFile files : ftpFiles) {
if (files.isFile()) {
System.out.println("=================="+files.getName());
File localFile = new File(localpath + "/" + files.getName()); 
bufferRead = new BufferedOutputStream(new FileOutputStream(localFile));
ftpClient.retrieveFile(files.getName(), bufferRead); 
bufferRead.flush();
}
}
ftpClient.logout();
flag = true;
               
} catch (IOException e) {
e.printStackTrace();
}finally{ 
            closeFtpConnection(ftpClient,bufferRead,null);
            log.info("文件下载成功");
         } 
}
modifiedLocalFileName(localpath,fileName,filenames);
return flag;
}

@Override
public void modifiedLocalFileName(String localpath,String fileName, String filenames){
File file = new File(localpath);
File [] fileList = file.listFiles();
if (file.exists()) {
if (null == fileList ||fileList.length == 0) {
log.error("文件夹是空的");
}else{
for (File data : fileList) {
String orprefix = data.getName().substring(0,data.getName().lastIndexOf("."));
String prefix = fileName.substring(0,fileName.lastIndexOf("."));
System.out.println("index===" + orprefix + "prefix ===" + prefix);
if (orprefix.contains(prefix)) {
boolean f = data.renameTo(new File(localpath + "/"+filenames));
System.out.println("f============="+f);
}else{
log.error("需要重命名的文件不存在,请检查。。。");
}
}
}
}
}
 

@Override
public void closeFtpConnection(FTPClient ftpClient,BufferedOutputStream bufferRead,BufferedInputStream buffer){
if(ftpClient.isConnected()){ 
             try{
                 ftpClient.disconnect();
             }catch(IOException e){
                 e.printStackTrace();
             }
         } 
if(null != bufferRead){
             try {
                 bufferRead.close();
             } catch (IOException e) {
                 e.printStackTrace();
             } 
         } 
if(null != buffer){
             try {
             buffer.close();
             } catch (IOException e) {
                 e.printStackTrace();
             } 
         } 
}
 
 
public static void main(String[] args) throws IOException {
String hostname = "xx.xxx.x.xxx";
Integer port = 21;
String username = "edwftp";
String password = "edwftp";
String fpath = "/etl/etldata/back/";
String localPath = "C:/Users/Administrator/Desktop/ftp下载/";
String fileName = "test.txt";
String filenames = "ok.txt";
FtpUtilsImpl ftp = new FtpUtilsImpl();
/*ftp.modifiedLocalFileName(localPath,fileName,filenames);*/
ftp.downloadFileList(hostname, port, username, password, fpath, localPath,fileName,filenames);
/*ftp.uploadLocalFilesToFtp(hostname, port, username, password, fpath, localPath, fileName);*/
/*ftp.modifiedLocalFileName(localPath);*/
}
}

热心网友 时间:2022-06-29 05:10

首先保证ftp服务器的创建文件夹权限已开放,关键代码如下。
/**
* 在当前目录下创建文件夹
*
* @param dir
* @return
* @throws Exception
*/
private boolean createDir(String dir) {
try {
ftpClient.ascii();
StringTokenizer s = new StringTokenizer(dir, "/"); // sign
s.countTokens();
String pathName = ftpClient.pwd();
while (s.hasMoreElements()) {
pathName = pathName + "/" + (String) s.nextElement();
try {
ftpClient.sendServer("MKD " + pathName + "\r\n");
} catch (Exception e) {
e = null;
return false;
}
ftpClient.readServerResponse();
}
ftpClient.binary();
return true;
} catch (IOException e1) {
e1.printStackTrace();
return false;
}
}

热心网友 时间:2022-06-29 05:11

用ftp命令:mkdir()
可以创建文件夹。

热心网友 时间:2022-06-29 05:11

无法实现.服务器不能任由你修改.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桃李芬芳的近义词是? 请会答正确。 急... 墨西哥很混乱吗 为什么我的OPPOR9手机连接到任何蓝牙设备放歌曲,都没有办法在蓝牙设备... OPPOA9如何连接酷狗与手机蓝牙? 华为荣耀3X 白色畅玩版的声音调至最大声仍很小声 荣耀3x刷机后卸载了一些系统软件,然后就无法开机,一直停留在开机界面... 平安富赢金生年金保险值得买吗?最全产品测评! 收音机音量旋钮音量最大还是小 德生pl_450收音机音量电位器声音惑大惑小,电位器的型号是什么_百度知 ... 浙江金融学院有什么专业 ftp为什么不适合在两个计算机之间共享读写文件 怎么向ftp中的txt文件写入数据 红茶里面含有什么元素?对人体有那些好处!拜托各位大神 windows7 64位旗舰版下载iso 新装Windows7旗舰版,ISO文件大小2.43G,20G的C盘能装下吗?会不会不够容量? 有联想windows7旗舰版iso 如何安装成专业版 win7旗舰版的iso文件怎么用?怎么安装 怎样申请冒泡社区帐号 冒泡社区如何刷K,高手速来,感激不尽! 手机冒泡社区 冒泡社区这个软件里面怎么升级? 从网上下载的文件怎么弄到冒泡社区里?详细一点 梦见大水山体滑坡,被压后死里逃生。 现在冒泡社区还有冒泡空间么?我的更新的怎么没有空间那些了?只有泡泡。 关于手机上的冒泡社区更新的问题 冒泡社区(超级大玩家) 猫和老鼠中的汤姆有了钱然后又去商店买了一只小白鼠是哪一集 如何编辑AI智能助手中的卡片 我在网上买了机票,我的vivoX21手机怎么,没有创建智能卡片? 一部电影,不是动画片,讲一个小男孩在家里被老鼠变小,然后和一群途中遇到的小伙伴一起冒险 ftp服务器,我要有一些用户可以进行写入和修改.来宾用户不能够修改.来宾用户可以下载文件怎么做??? 执行国标的农药超低溶量液剂产品有哪些 渗透力最强的表面活性剂 石油可采储量增长潜力 睡觉时间过长会有黑眼圈吗?` 怎样用最简单的方法消除眼袋? 睡久了也会有黑眼圈么? 孙卫的获奖 长庆油田超低渗透第四项目部在哪? 为什么我每天睡超过十个小时还是会困,而且还有黑眼圈和眼袋啊 经常睡觉为什么还会有黑眼圈和眼袋?拜托了各位 谢谢 为什么睡足了也会有黑眼圈?? 晚上睡觉时间太长也会有黑眼圈,为什么? 为什么我睡够了还是有黑眼圈眼袋 为什么睡得晚会有眼袋或者黑眼圈 晚上睡得晚眼睛就有眼袋还是黑眼圈的 怎么可以缓解呢 银行户头能随便改吗 个体户没有对公账户、但购买方要求填写银行账户及开户行、可以随意填写吗? 工商银行开户名可以更改吗?错别字! 用户口本可以在银行开户或修改设置吗 银行的户名可以随便取吗,比如说 中国人民法院