English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هذا المقال يشرح كيفية استخدام أدوات Apache commons-net للتحقق من ftp لتحميل و تنزيل الملفات على خادم ftp.
الجزء الأول: التحضير
يحتاج إلى إضافة مكتبة commons-net-3.5.jar.
استخدام Maven استيراد:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency>
تحميل يدويًا:
https://ar.oldtoolbag.com/softs/550085.html
ثانيًا، الاتصال بـ Server FTP
/** * الاتصال بـ Server FTP * @throws IOException */ public static final String ANONYMOUS_USER = "anonymous"; private FTPClient connect(){ FTPClient client = new FTPClient(); try{ // الاتصال بـ Server FTP client.connect(this.host, this.port); // الدخول إذا (this.user == null || "".equals(this.user)) { // استخدم الدخول المجهول client.login(ANONYMOUS_USER, ANONYMOUS_USER); } else{ client.login(this.user, this.password); } // ضبط تنسيق الملف client.setFileType(FTPClient.BINARY_FILE_TYPE); // الحصول على إجابة من Server FTP int reply = client.getReplyCode(); إذا (!FTPReply.isPositiveCompletion(reply)) { client.disconnect(); return null; } // تغيير دليل العمل changeWorkingDirectory(client); System.out.println("===اتصال بـFTP: " + host + ":" + port); } catch(IOException e){ return null; } return client; } /** * تغيير دليل العمل، إذا لم يكن الدليل المعدية موجودًا، يتم إنشاء الدليل * @param client * @throws IOException */ private void changeWorkingDirectory(FTPClient client) throws IOException{ إذا (this.ftpPath != null && "".equals(this.ftpPath) != null) { Boolean ok = client.changeWorkingDirectory(this.ftpPath); if(!ok){ //ftpPath 不存在,手动创建目录 StringTokenizer token = new StringTokenizer(this.ftpPath,"\\//"); while(token.hasMoreTokens()){ String path = token.nextToken(); client.makeDirectory(path); client.changeWorkingDirectory(path); } } } } /** * 断开FTP连接 * @param ftpClient * @throws IOException */ public void close(FTPClient ftpClient) throws IOException{ if(ftpClient!=null && ftpClient.isConnected()){ ftpClient.logout(); ftpClient.disconnect(); } System.out.println("!!!断开FTP连接:"+host+":"+port); }
host: ftp服务器ip地址
port: ftp服务器端口
user: 登录用户
password: 登录密码
登录用户为空时,使用匿名用户登录。
ftpPath: ftp路径,ftp路径不存在时自动创建,如果是多层目录结构,需要迭代创建目录。
三、上传文件
/** * 上传文件 * @param targetName 上传到ftp文件名 * @param localFile 本地文件路径 * @return */ public Boolean upload(String targetName,String localFile){ //连接ftp server FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("إتصال بخادم FTP ["+host+":"+port+"] فشل!"); return false; } File file = new File(localFile); //设置上传后文件名 if(targetName==null||"".equals(targetName)) targetName = file.getName(); FileInputStream fis = null; try{ long now = System.currentTimeMillis(); //بدء رفع الملف fis = new FileInputStream(file); System.out.println(">>>بدء رفع الملف: " + file.getName()); Boolean ok = ftpClient.storeFile(targetName, fis); if(ok){ //نجاح الرفع long times = System.currentTimeMillis() - now; System.out.println(String.format(">>>نجاح الرفع: حجم:%s, وقت الرفع:%d ثانية", formatSize(file.length()),times/1000)); } else//فشل الرفع System.out.println(String.format(">>>فشل الرفع: حجم:%s", formatSize(file.length()))); } catch(IOException e){ System.err.println(String.format(">>>فشل الرفع: حجم:%s", formatSize(file.length()))); e.printStackTrace(); return false; } finally{ try{ if(fis!=null) fis.close(); close(ftpClient); } catch(Exception e){ } } return true; }
الجزء الرابع: تنزيل الملفات
/** * تنزيل الملفات * @param localPath مسار التخزين المحلي * @return */ public int download(String localPath){ // إتصال بخادم ftp FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("إتصال بخادم FTP ["+host+":"+port+"] فشل!"); return 0; } File dir = new File(localPath); if(!dir.exists()) dir.mkdirs(); FTPFile[] ftpFiles = null; try{ ftpFiles = ftpClient.listFiles(); if(ftpFiles==null||ftpFiles.length==0) return 0; } catch(IOException e){ return 0; } int c = 0; for (int i=0;i<ftpFiles.length;i++){ FileOutputStream fos = null; try{ String name = ftpFiles[i].getName(); fos = new FileOutputStream(new File(dir.getAbsolutePath()+File.separator+name)); System.out.println("<<<开始下载文件:"+name); long now = System.currentTimeMillis(); Boolean ok = ftpClient.retrieveFile(new String(name.getBytes("UTF-8"),"ISO-8859-1"), fos); if(ok){ //下载成功 long times = System.currentTimeMillis() - now; System.out.println(String.format("<<<下载成功:大小:%s,上传时间:%d秒", formatSize(ftpFiles[i].getSize()),times/1000)); c++; } else{ System.out.println("<<<下载失败"); } } catch(IOException e){ System.err.println("<<<下载失败"); e.printStackTrace(); } finally{ try{ if(fos!=null) fos.close(); close(ftpClient); } catch(Exception e){ } } } return c; }
格式化文件大小
private static final DecimalFormat DF = new DecimalFormat("#.##"); /** * 格式化文件大小(B,KB,MB,GB) * @param size * @return */ private String formatSize(long size){ if(size<1024){ return size + " B"; }else if(size<1024*1024){ return size/1024 + " KB"; }else if(size<1024*1024*1024){ return (size/(1024*1024)) + " MB"; }else{}} double gb = size/(1024*1024*1024); return DF.format(gb)+" GB"; } }
الخميس، اختبار
public static void main(String args[]){ FTPTest ftp = new FTPTest("192.168.1.10",21,null,null,"/temp/2016/12"); ftp.upload("newFile.rar", "D:/ftp/TeamViewerPortable.rar"); System.out.println(""); ftp.download("D:/ftp/"); }
النتيجة
=== الاتصال بـ FTP: 192.168.1.10:21 >>>بدء تحميل ملف: TeamViewerPortable.rar >>>نجاح التحميل: حجم: 5 MB, وقت التحميل: 3 ثانية !!!قطع اتصال FTP: 192.168.1.10:21 === الاتصال بـ FTP: 192.168.1.10:21 <<<بدء التحميل: ملف.newFile.rar <<<نجاح التحميل: حجم: 5 MB, وقت التحميل: 4 ثانية !!!قطع اتصال FTP: 192.168.1.10:21
الخلاصة
هذا هو محتوى المقال الكامل حول كيفية استخدام مكتبة Apache لتحقيق نقل ملفات FTP باستخدام Java، آمل أن يكون مفيدًا لكم. يمكن للمحبين متابعة مواضيع أخرى ذات صلة على هذا الموقع، وترحيبًا بالتعليقات التي تشير إلى القصور، شكرًا للأصدقاء لدعم هذا الموقع!
بيان: محتوى هذا المقال تم جمعه من الإنترنت، يحق للمالك الأصلي الحصول عليه، يتم جمع المحتوى من قبل المستخدمين على الإنترنت بشكل تلقائي وتم تحميله، ويحمل هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا اكتشفت محتوى مخالف للحقوق النشرية، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (أثناء إرسال البريد الإلكتروني، يرجى استبدال # بـ @) للإبلاغ، وتقديم الدليل المتعلق، وسيتم حذف المحتوى المزعوم فور التحقق منه.