电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java搭建ftp/sftp進行數據傳遞的全過程

瀏覽:114日期:2022-08-09 14:31:15
ftp/sftp概念及搭建

ftp是一種文件傳輸協議,讓客戶端和服務端能夠互相傳遞文件,圖片等數據;方便快捷;sftp是ssh file transfer protocol縮寫,也是一種文件傳輸協議.sftp比ftp安全的多,但傳輸效率要低的多

搭建:ftp可以搜索網上教程,很多,在此不過多贅述

java搭建ftp/sftp進行數據傳遞的全過程

創建完成后,通過瀏覽器就可以訪問到內容了;

sftp用freesshd搭建(記得freesshd的安裝路徑不要有中文,否則各種報錯);這個也可以自行百度,解決方法很多;

Java代碼

代碼如下:import java.io.*;import java.net.SocketException; import java.util.ArrayList;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPClientConfig;import org.apache.commons.net.ftp.FTPReply;public class FTPClientTest{ private static String userName; // FTP 登錄用戶名 private static String password; // FTP 登錄密碼 private static String ip;// FTP 服務器地址IP地址 private static int port; // FTP 端口 //構造函數初始化 public FTPClientTest(String userName,String password,String ip,int port){ this.userName=userName; this.password=password; this.ip=ip; this.port=port; } public static String getUserName(){ return userName;} public static void setUserName(String userName) {FTPClientTest.userName = userName; } public static String getPassword() {return password;} public static void setPassword(String password){FTPClientTest.password = password;} public static String getIp() { return ip; } public static void setIp(String ip){FTPClientTest.ip = ip;} public static int getPort() {return port; } public static void setPort(int port) {FTPClientTest.port = port;} private static FTPClient ftpClient = null; // FTP 客戶端代理/** * 連接到服務器 * @return true 連接服務器成功,false 連接服務器失敗 */ public boolean connectServer() { System.out.println('進行連接'); boolean flag = true; if (ftpClient == null) { int reply; try { System.out.println('初始化連接'); ftpClient = new FTPClient(); String LOCAL_CHARSET = 'GBK'; System.out.println('設置IP和端口'); ftpClient.connect(ip, port); System.out.println('設置密碼'); ftpClient.login(userName, password); System.out.println('進行連接'); reply = ftpClient.getReplyCode(); ftpClient.setDataTimeout(120000); System.out.println('設置編碼操作方式'); if (FTPReply.isPositiveCompletion(ftpClient.sendCommand('OPTS UTF8', 'ON'))) // 開啟服務器對UTF-8的支持,如果服務器支持就用UTF-8編碼,否則就使用本地編碼(GBK). { LOCAL_CHARSET = 'UTF-8'; } System.out.println('設置編碼操作方式1'); ftpClient.setControlEncoding(LOCAL_CHARSET); System.out.println('是否連接成功'); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); System.out.println('FTP 服務拒絕連接!'); flag = false; } } catch (SocketException e) { flag = false; e.printStackTrace(); System.out.println('登錄ftp服務器 ' + ip + ' 失敗,連接超時!'); } catch (IOException e) { flag = false; e.printStackTrace(); System.out.println('登錄ftp服務器 ' + ip + ' 失敗,FTP服務器無法打開!'); } catch (Exception e) { flag = false; e.printStackTrace(); // System.out.println('登錄ftp服務器 ' + ip + ' 失敗,FTP服務器無法打開!'); } } return flag; }/** * 上傳文件 * * @param remoteFile 遠程文件路徑,支持多級目錄嵌套 需要保證路徑已經存在 并切包含文件重命名 * @param localFile 本地文件名稱,絕對路徑 * */ public boolean uploadFile(String remoteFile1, File localFile) { boolean flag = false;try{ InputStream in = new FileInputStream(localFile); String remote = new String(remoteFile1.getBytes('UTF-8'), 'iso-8859-1'); if (ftpClient.storeFile(remote, in)) {flag = true;System.out.println(localFile.getAbsolutePath() + '上傳文件成功!'); } else {System.out.println(localFile.getAbsolutePath() + '上傳文件失敗!'); } in.close();}catch (FileNotFoundException e){ // TODO Auto-generated catch block e.printStackTrace();}catch (UnsupportedEncodingException e){ // TODO Auto-generated catch block e.printStackTrace();}catch (IOException e){ // TODO Auto-generated catch block e.printStackTrace();}return flag; }/** * 上傳單個文件 * * @param local 本地文件名稱,絕對路徑 * @param remote 遠程文件路徑,支持多級目錄嵌套 * @return */ public boolean uploadFile(String local, String remote) {boolean flag = true;String remoteFileName = remote;if (remote.contains('/')){ remoteFileName = remote.substring(remote.lastIndexOf('/') + 1); // 創建服務器遠程目錄結構,創建失敗直接返回 if (!CreateDirecroty(remote)) {return false; }}File f = new File(local);if (!uploadFile(remoteFileName, f)){ flag = false;}return flag; }/** * 上傳文件夾內的所有文件 * * * @param filename 本地文件夾絕對路徑 只能上傳文件,子文件夾無法上傳 * @param uploadpath 上傳到FTP的路徑,形式為/或/dir1/dir2/../ * @return true 上傳成功,false 上傳失敗 * @throws IOException */ public ArrayList<String> uploadManyFile(String filename, String uploadpath) {boolean flag = true;ArrayList<String> l = new ArrayList<String>();StringBuffer strBuf = new StringBuffer();int n = 0; // 上傳失敗的文件個數int m = 0; // 上傳成功的文件個數try{ ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); ftpClient.changeWorkingDirectory('/'); File file = new File(filename); File fileList[] = file.listFiles();for (File upfile : fileList) {if (!upfile.isDirectory()){ String local = upfile.getCanonicalPath().replaceAll('', '/'); String temp = upfile.getCanonicalPath(); String a = temp.replace(filename + '', ''); String remote = uploadpath.replaceAll('', '/') + a; flag = uploadFile(local, remote); ftpClient.changeWorkingDirectory('/');}if (!flag){ n++; strBuf.append(upfile.getName() + ','); System.out.println('文件[' + upfile.getName() + ']上傳失敗');}else{ m++;} } l.add('失敗個數' + n); l.add('成功個數' + m); l.add(strBuf.toString());}catch (NullPointerException e){ e.printStackTrace(); System.out.println('本地文件上傳失敗!找不到上傳文件!' + e);}catch (Exception e){ e.printStackTrace(); System.out.println('本地文件上傳失敗!' + e);}return l; } /** * 下載文件 * * @param remoteFileName --服務器上的文件名 * @param localFileName--本地文件名 * @return true 下載成功,false 下載失敗 */ public boolean loadFile(String remoteFileName, String localFileName) {boolean flag = true;// 下載文件BufferedOutputStream buffOut = null;try{ buffOut = new BufferedOutputStream(new FileOutputStream(localFileName)); flag = ftpClient.retrieveFile(new String(remoteFileName.getBytes('UTF-8'), 'iso-8859-1'), buffOut);}catch (Exception e){ e.printStackTrace(); System.out.println('本地文件下載失敗!' + e);}finally{ try {if (buffOut != null) buffOut.close(); } catch (Exception e) {e.printStackTrace(); }}return flag; }/** * 刪除一個文件 */ public boolean deleteFile(String filename) {boolean flag = true;try{ flag = ftpClient.deleteFile(new String(filename.getBytes('UTF-8'), 'iso-8859-1')); if (flag) {System.out.println('刪除文件' + filename + '成功!'); } else {System.out.println('刪除文件' + filename + '成功!'); }}catch (IOException ioe){ ioe.printStackTrace();}return flag; }/** * 刪除空目錄 */ public void deleteEmptyDirectory(String pathname) {try{ ftpClient.removeDirectory(new String(pathname.getBytes('UTF-8'), 'iso-8859-1'));}catch (IOException ioe){ ioe.printStackTrace();} }/** * 列出Ftp服務器上的所有文件和目錄 */ public String[] listRemoteAllFiles() { try{ String[] names = ftpClient.listNames();for (int i = 0; i < names.length; i++) {System.out.println(names[i]); } return names;}catch (Exception e){ e.printStackTrace();}return null; }/** * 關閉連接 */ public void closeConnect() { try{ if (ftpClient != null) {ftpClient.logout();ftpClient.disconnect();ftpClient=null; }}catch (Exception e){ e.printStackTrace();} }/** * 設置傳輸文件的類型[文本文件或者二進制文件] 1是文本文件 其余 二進制文件 * * @param fileType--BINARY_FILE_TYPE(二進制文件)、ASCII_FILE_TYPE(文本文件) * */ public void setFileType(int fileType1) { try{ int a = FTP.BINARY_FILE_TYPE; if (fileType1 == 1) {a = FTP.ASCII_FILE_TYPE; } ftpClient.setFileType(a);}catch (Exception e){ e.printStackTrace();} }/** * 進入到服務器的某個目錄下 * * @param directory */ public boolean changeWorkingDirectory(String directory) {boolean flag = true;try{ flag = ftpClient.changeWorkingDirectory(directory); if (flag) {System.out.println('進入文件夾' + directory + ' 成功!'); } else {System.out.println('進入文件夾' + directory + ' 失敗!'); }}catch (IOException ioe){ ioe.printStackTrace();}return flag; }/** * 返回到上一層目錄 */ public void changeToParentDirectory() { try { ftpClient.changeToParentDirectory(); } catch (IOException ioe) { ioe.printStackTrace(); } }/** * 重命名文件 * * @param oldFileName --原文件名 * @param newFileName --新文件名 */ public void renameFile(String oldFileName, String newFileName) {try{ System.out.println(oldFileName); System.out.println(newFileName); ftpClient.rename(new String(oldFileName.getBytes('UTF-8'), 'iso-8859-1'), new String(newFileName.getBytes('UTF-8'), 'iso-8859-1'));}catch (IOException ioe){ ioe.printStackTrace();}catch(Exception e){ e.printStackTrace();} }/** * 設置FTP客服端的配置--一般可以不設置 * * @return ftpConfig */ @SuppressWarnings('unused')private FTPClientConfig getFtpConfig() { FTPClientConfig ftpConfig = new FTPClientConfig(FTPClientConfig.SYST_UNIX); ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING); return ftpConfig; }/** * 轉碼[ISO-8859-1 -> GBK] 不同的平臺需要不同的轉碼 * * @param obj * @return '' */ @SuppressWarnings('unused')private String iso8859togbk(Object obj) {try{ if (obj == null)return ''; elsereturn new String(obj.toString().getBytes('iso-8859-1'), 'GBK');}catch (Exception e){ return '';} }/** * 在服務器上創建一個文件夾 * * @param dir 文件夾名稱,不能含有特殊字符,如 、/ 、: 、* 、?、 '、 <、>... */ public boolean makeDirectory(String dir) {boolean flag = true;try{ flag = ftpClient.makeDirectory(dir); if (flag) {System.out.println('創建文件夾' + dir + ' 成功!'); } else {System.out.println('創建文件夾' + dir + ' 失敗!'); }}catch (Exception e){ e.printStackTrace();}return flag; }/** * 遞歸創建遠程服務器目錄 * * @param remote 遠程服務器文件絕對路徑 路徑: /Draw1/Point1/GUID1/a.bmp 或者/Draw1/Point1/GUID1/ 最后一級文件夾必須有/否則最后一級文件夾創建不成功 * * @return 目錄創建是否成功 * @throws IOException */ public boolean CreateDirecroty(String remote) {boolean success = true;try{ String directory = remote.substring(0, remote.lastIndexOf('/') + 1); // 如果遠程目錄不存在,則遞歸創建遠程服務器目錄 if (!directory.equalsIgnoreCase('/') && !changeWorkingDirectory(new String(directory))) {int start = 0;int end = 0;if (directory.startsWith('/')){ start = 1;}else{ start = 0;}end = directory.indexOf('/', start);while (true){ String subDirectory; subDirectory = new String(remote.substring(start, end).getBytes('GBK'), 'iso-8859-1');if (!changeWorkingDirectory(subDirectory)) {if (makeDirectory(subDirectory)){ changeWorkingDirectory(subDirectory);}else{ System.out.println('創建目錄[' + subDirectory + ']失敗'); System.out.println('創建目錄[' + subDirectory + ']失敗'); success = false; return success;} } start = end + 1; end = directory.indexOf('/', start); // 檢查所有目錄是否創建完畢 if (end <= start) {break; }} }}catch (UnsupportedEncodingException e){ // TODO Auto-generated catch block e.printStackTrace();}return success; }}ftp測試代碼如下:

public class test {public static void main(String[] args) {FTPClientTest ftp=new FTPClientTest('user', '548', '168.125.256.22', 21);boolean b=ftp.connectServer();System.out.println(b);System.out.println(ftp.listRemoteAllFiles());System.out.println(ftp.uploadFile('F:/home/b.txt', '/c.txt'));System.out.println(ftp.loadFile('/a.txt', 'F:/home/b.txt'));ftp.closeConnect();}}

輸出結果如下:

java搭建ftp/sftp進行數據傳遞的全過程

成功了;

sftp搭建完成后,也測試下,至于搭建過程,自行百度好啦

java搭建ftp/sftp進行數據傳遞的全過程

看到沒,連接成功了;我用我的電腦模擬的;

標簽: Java
相關文章:
主站蜘蛛池模板: 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 农业仪器网 - 中国自动化农业仪器信息交流平台 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 广州昊至泉水上乐园设备有限公司 | 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 |