تعلم كيفية تحميل الملفات من سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: التعامل مع الشبكات Java Networking
صفحة 1 من اصل 1 • شاطر
تعلم كيفية تحميل الملفات من سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API
بسم الله الرحمن الرحيم
أهلا وسهلا بكم إخوانى الكرام .... فى الدرس السابق [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] أما درس اليوم هو العكس بمعنى تحميل ملف من سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API
اليوم سنتخدم تلك المكتبة فى كيفية تحميل ملف من الخادم الخادم حيث توفر تلك المكتبة الفئة FTPClient و التى لديها طريقتين أو أسلوبين لتحميل ملف من خادم FTP الى الجهاز الشخصى وهما على النحو التالى :
- retrieveFileStream
- retrieveFile
وقبل البدء قم بتحميل المكتبة من هنــــــــــــــــــــا ثم فك الضغط ووضع الملف apache-commons-net.jar داخل مجلد التطبيق ومن ثم إدراجة الى المشروع :
أولا : تحميل ملف بأستخدام الطريقة retrieveFileStream
1_ إستيراد مكتبات العمل اللازمة :
- الكود:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
2_ داخل الدالة الرئسية نقوم بالاعلان عن المتغيرات التالية :
- الكود:
String server = "www.myserver.com";
int port = 21;
String user = "user";
String pass = "pass";
المتغير الاول server لتخزين عنوان الخاد فيه
المتغير الثانى port لتخزين المنفذ للخادم .....الافتراضى 21
و المتغير الثالث و الرابع لتخزين اسم المستخدم و كلمة المرور للخادم
3_ بعد ذلك نقوم بانشاء مثيل جديد من الفئة FTPClient و ذلك على النحو التالى :
- الكود:
FTPClient ftpClient = new FTPClient();
4_ نقوم بانشاء اتصال مع الخادم من خلال الاسلوب connect مع تمرير عنوان الاتصال و رقم المنفذ لهذا الاسلوب على النحو التالى :
- الكود:
ftpClient.connect(server, port);
5_ نقوم بعمل تسجيل دخول للخادم باستخدام الاسلوب login مع تمرير اسم المستخدم و كلمة المرور على النحو التالى :
- الكود:
ftpClient.login(user, pass);
6_ افتراضيا يقوم بروتوكول FTP بتأسيس اتصال من خلال فتح منفذ على العميل ويسمح الملقم الاتصال من هذا المنفذ. وهذا ما يسمى الوضع النشط ... ولكن عادة ما يتم حظرها من قبل جدار الحماية لذلك قد لا تستطيع رفع الملفات.... لحسن الحظ فإن بروتوكول FTP لديه طريقة أخرى وهى الوضع الخامل أو السلبي بحيث لا يتم الحظر من قبل جدار الحماية.....لذلك فمن المستحسن التبديل إلى الوضع الخامل أو السلبي المحلية قبل نقل البيانات، بواسطة استدعاء الأسلوب enterLocalPassiveMode على النحو التالى :
- الكود:
ftpClient.enterLocalPassiveMode();
7_ نقوم بتحديد نوع الملف أما ان يكون [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] أو [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] و ذلك من خلال الاسلوب setFileType ويستخدم لنقل الملفات النوع الافتراضي الاول هو ASCII_FILE_TYPE ولكن يجب أن يتم تعيين للنوع الثنائي من أجل العمل مع أي ملفات و ذلك على النحو التالى :
- الكود:
ftpClient.setFileType([ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
8_ تحديد أسم و مسار الملف المراد تحمليه من السرفر على النحو التالى :
- الكود:
String remoteFile2 = "/test/song.mp3";
9_تعين مسار الحفظ على الجهاز
- الكود:
File downloadFile2 = new File("D:/Downloads/song.mp3");
10_نقوم بالاعلان عن الكائن OutputStream لقراءة الملف على النحو التالى :
- الكود:
OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
11_ نقوم بالاعلان عن الكائن InputStream ثم تمرير الية الطريقة retrieveFileStream على النحو التالى :
- الكود:
InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
12_ نقوم بانشاء مصفوفة من نوع byte لتخزين ما يتم قرائة من الملف فى تلك المصفوفة بالبايت على النحو التالى :
- الكود:
byte[] bytesArray = new byte[4096];
و يمكنك ملاحظة اننا قمنا بتحديد حجم المصفوفة بــــ 4096 و الذى يمثل 4 ميجا بايت و الهدف من ذلك اخبار التطبيق انه كلما تم تم تخزين 4 ميجا بايت يتم تحمليهم ثم يعاود القراءة من جديد ....وهكذا يتم تقسيم الملف فيسهل و يسرع عملية التحميل
13_ نقوم بعمل حلقة تكرارية للحصول على كافة البايت المخزن فى المصفوفة ومن ثم كتابتها الى الملف و ذلك على النحو التالى :
- الكود:
int bytesRead = -1;
while ((bytesRead = inputStream.read(bytesArray)) != -1) {
outputStream2.write(bytesArray, 0, bytesRead);
}
14_ التأكد من اتمام عملية التحميل ....فاذا كانت ناجحة يتم اظهار رسالة للمستخدم بذلك
- الكود:
success = ftpClient.completePendingCommand();
if (success) {
System.out.println("File #2 has been downloaded successfully.");
}
و اليكم الكود الكامل لتحميل ملف باستخدام الطريقة retrieveFileStream
- الكود:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FTPDownloadFileDemo {
public static void main(String[] args) {
String server = "www.myserver.com";
int port = 21;
String user = "user";
String pass = "pass";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType([ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
String remoteFile2 = "/test/song.mp3";
File downloadFile2 = new File("D:/Downloads/song.mp3");
OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
byte[] bytesArray = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(bytesArray)) != -1) {
outputStream2.write(bytesArray, 0, bytesRead);
}
success = ftpClient.completePendingCommand();
if (success) {
System.out.println("File #2 has been downloaded successfully.");
}
outputStream2.close();
inputStream.close();
} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
ثانيا : تحميل ملف باستخدام retrieveFile
و اليكم الكود الكامل باستخدام تلك الطريقة :
- الكود:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FTPDownloadFileDemo {
public static void main(String[] args) {
String server = "www.myserver.com";
int port = 21;
String user = "user";
String pass = "pass";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType([ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
String remoteFile1 = "/test/video.mp4";
File downloadFile1 = new File("D:/Downloads/video.mp4");
OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
outputStream1.close();
if (success) {
System.out.println("File #1 has been downloaded successfully.");
}
} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
لاحظ بنفسك الفرق بينهما
تحياتى لكم
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: تعلم كيفية تحميل الملفات من سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API
تسلم ايدك أخى و استاذى أحمد على هذا الموضوع القيم صراحة
ذوكا- .....
- تاريخ التسجيل : 26/05/2013
المساهمات : 92
النقاط : 156
التقيم : 12
الدولة :
الجنس :
رد: تعلم كيفية تحميل الملفات من سرفر FTP من خلال تطبيفات الجافا بإستخدام Apache Commons Net API
رائع
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: التعامل مع الشبكات Java Networking
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
الجمعة أكتوبر 04, 2024 9:17 pm من طرف moslema_r
» شركة تنظيف مطابخ بالرياض بخصم 30% | كلين فايندر الرياض
الجمعة أكتوبر 04, 2024 9:09 pm من طرف moslema_r
» شركة تنظيف منازل بالرياض الحلول المثالية لتجنب عناء التنظيف
الجمعة أكتوبر 04, 2024 9:04 pm من طرف moslema_r
» افضل شركة تنظيف شقق بالرياض معتمدة | كلين فايندر
الجمعة أكتوبر 04, 2024 8:58 pm من طرف moslema_r
» استمتع بتجربة مميزة مع - شركة تنظيف اثاث بالرياض 20% خصم
الجمعة أكتوبر 04, 2024 8:52 pm من طرف moslema_r
» افضل شركة تنظيف احواش بالرياض | كلين فايندر
الجمعة أكتوبر 04, 2024 8:46 pm من طرف moslema_r
» افضل موقع بيع وشراء اثاث مستعمل واجهزة كهربائية بالكويت بأعلى سعر
الجمعة أكتوبر 04, 2024 8:40 pm من طرف moslema_r
» موقع مظلات وسواتر بالرياض معتمد - ضمان على االجودة | مؤسسة الظلال الشاملة
الجمعة أكتوبر 04, 2024 8:33 pm من طرف moslema_r
» خدمات فني حداد الرياض - بادر بطلب خدماتك بخصم حتى 15%
الجمعة أكتوبر 04, 2024 8:29 pm من طرف moslema_r
» مميزات عبايات سوداء فخمة:
الجمعة أكتوبر 04, 2024 8:24 pm من طرف moslema_r