الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كود بسيط جدا لكن نتيجته مدهشة

مغلق
بدأه mamdouh في 7 يناير 2003 · 13 رد · 1,338 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة

class test{ 

   public static void main(String args[]){ 

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

         System.out.println("File " + i + ":" + args); 

      }

      if (args.length<=0) {

         System.out.println("No files!"); 

     }

   } 

}

جمع البرنامج الصغير (compile)

ثم نفذه كما يلى

java test *.*

البرنامج سوف يعرض كل الملفات الموجوده فى الدليل الذى يعمل منه

رغم ان البرنامج لايحتوى على ايه دوال خاصة بالتعامل مع الملفات الموجوده فى الحزمةio

الاجابة موجوده فى كتاب

500 java tips

ياريت اللى عارف الفكرة يشرحها وربنا يكرمه

#2

الحقيقة لاادرى لماذا يظهر الكود بهذه الطريقة الغريبة وقد حاولت تعديلة اكثر من مرة لكن بدون فائدة وقد حاولت ارسال الكود كصورة صغيرة ولكن ظهرت لى رسالة ادارية بان الصورة كبيرة (9 kb)!!!فارجو المعذرة

test.txt

#3

و ها هو الكود يا صاحبي ...

class test
{ 
	public static void main(String args[])
	{ 
		for (int i = 0;i < args.length; i++)
		{
			System.out.println("File " + i + ":" + args); 
		}

		if (args.length<=0)
		{
			System.out.println("No files!"); 
		}
	} 
}

و الفكره كلها أنك بعد ما تكتب الكود تظلله و بعد كده تضغط علي رمز كود ال php الموجود في و سط أدوات الكتابه ...

أستني بقي لما اشوف الكود المعدل عشان نفهمه سوا ...

مع تحياتي ..

أحمد ...

#4

ايه الاخبار ياجماعة الخير ..مفيش حدا عنده تفسير لهذا الكود

#5

بسم الله الرحمن الرحيم

ممدوح الكود بيأخذ Arguments اللى انت حطيتها و يطبعها على الشاشة مسبوقة برقم المعمل ليس أكثر و لا يعرض اسامى ملفات أو أى شىء أخر سوى هذا أو رسالة No Files فى حالة لو لم يوضع معاملات.

خالد المصرى

#6

خالد انا نفذت الامر بوضع المعاملات *.*وبتكون النتيجة ان البرنامج فعلا بيعرض كل الملفات الموجودة فى الدليل اللى هو فيه حتى الملفات المخفية

السطور التالية هى نتيجة تنفيذه معى..

C:j2sdk1.4.1_01>java test *.*
File 0:bin
File 1:COPYRIGHT
File 2:demo
File 3:include
File 4:jre
File 5:lib
File 6:LICENSE
File 7:readme.html
File 8:README.txt
File 9:src.zip
#7

بسم الله الرحمن الرحيم

:eek::eek::eek::eek::eek::eek::eek::eek::eek::eek::eek::eek::eek:

:eek::eek::eek::eek::eek::eek::eek::eek::eek::eek::eek::eek::eek:

بصراحة معنديش تفسير

خالد المصرى

#9

في الجافا الميثود main مهيئة لاستقبال مصفوفة نصية String[]

المهم هذي تعتبر الـCommand Line Argument

مثلا روح للدوس وانت في ويندوز وأكتب :

C:explorer D:

وشوف - حينفتح الويندوز اكسبلورر على الدليل D:

وهذي هي حقيقة البرنامج windows explorer حيث أن ما تفعله في النوافذ هو واجهه لأوامر مشابهه...

مثلا بتسوي برنامج يفتح صورة .. خلاص مررها كـargument مثلا برنامج أسميه

C:addola myfunnypic.jpg

يقوم بفتح الصورة في نافذة ... أعلم ويندوز أنه يستخدم برنامجي

عموما ... جرب mspaint

C:mspaint addola.bmp

وشوف

وهذي هي النظرية

لكن الغريب أنه يقبل *.* على أنها كل الملفات !!

#10

بسم الله الرحمن الرحيم

وبعد ...

أيها الاخو ة الكرام

بالنسبة لهذا الموضوع فقد قرأته من قبل و اعجبت بهذا الكود

ولكن لظروف الدراسة لم أستطع معرفة كيف يعمل هذا

الكود ولكن اليوم

تذكر ت الموضوع وحاولت أن أجد تفسير

والحمد لله توصلت لنتيجة وأحب أن اطلعكم عليها

-------

ال *

بالنسبة لنظام الدوس تعني أي شئ وهذا يعرفه الذين لهم خبرة بالدوس

فاذا قلنا

*.*

فنحن نعني اي اسم يكون على الشكل الاتي

Any String . Any String

لاحظ النقطة بين الاسمين

فكأن العبارة

*.*

هي أمر للدوس والناتج له يكون اي ملف يبدأ باي اسم ثم نقطة ثم امتداد باي اسم

ذلك انك لو غيرت العبارة التي فوق الى

*.txt

فسوف تظهر لك الملفات التي تنتهي فقط بالا متداد txt

وايضا لو غيرت العبارة الى

*.

سوف تظهر لك اي مجلد موجود في نفس المجلد

ونستطيع أن نغير العبارة التي استخدمها كاتب الموضوع

الى وضع * فقط وسوف تؤدي الغرض

لذلك أقول ان النجمه هي ليست String عادي وانما امر له Output

وهذا ال OutPut تم ادخاله في ال Array على انه args

وهذي طبيعة الدوس

فانك لو استخدمت امر مسح الملفات من مجلد وهو الامر

Del

وكتبته بهذه الطريقة

Del *.txt

فانه سوف يمسح الملفات التي تنتهي بالامتداد txt فقط

اما اذا كان الامر هكذا

Del *

او

Del *.*

فسوف يمسح جميع الملفات

الخلاصة ... هي أن ال * عبارة عن أمر تقريبا ويكون له نتيجة ( تعبر عن بدون شروط)

وفي مثالنا هذا اخرج الملفات التي تكون في نفس المجلد وهذه معروفة لمن استخدم الدوس

حيث ان اي امر بالدوس يطبق في نفس المجلد الا اذا اعطيته المسار الكامل

أرجو أن اكون وفقت في ايصال ما أردته وأعتذر اذا كان هناك من كتب عن هذا الشئ هنا قبلي ولم أنتبه

والله الموفق ....

#11

بسم الله الرحمن الرحيم

ماشى كلامك JP3003 لكن فى البرنامج لم يستخدم دوال تعامل مع ملفات او حتى المجلدات و هذا ما يدهش مجرد println ;)

خالد المصرى

#12

انا كما قلت من قبل

أن ال *

عبارة عن امر وهذا الامر يكون له نتيجة فاذا استعملته مع امر

Del

فانه سوف يطبقه على جميع الملفات

نفس الطريقة عندنا تنفذ برنامج الجافا من ال command line

فانه سوف يدخل الى برنامج الجافا Array of String

فيه اسماء الملفات اللي ينطبق عليها الشرط

وهنا لاننا وضعنا *

فمعناه جميع الملفات بدون استثناء

أرجو اني استطعت التوضيح ...

طبعا انا افترض انك تعرف كيفية طباعة String من برنامج الجافا اذا كان مع

ال Args

اللي هي البارميتير للميثود main

#13

بسم الله الرحمن الرحيم

على فكرة انا من مستخدمى الدوس القدماء منذ الأصدار الثالث و ما تتكلم عنه انا متفهمه لكن استغرابى هو كيف حدد اسماء الملفات دون استخدام دوال الخاص بذلك

هذا استفسارى فقط؟

خالد المصرى

#14

ممتاز

من قال لك ان البرنامج يحتاج دوال الملفات اصلا !

ياخي الكريم

تخيل ان كتبت في command line

الامر التالي

java test  file1.txt  file2.bat  file3.com

الا توافقني ان البرنامج سوف يطبع

اسماء الملفات كما هي

والسبب انها عبارة عن Strings ادخلت للبرنامج كا Args

اذا قلنا هذا المثال

java test *

او

java test *.*

أنا متأكد انك توافقني ان هذا عبارة عن أمر دوس ؟

طيب

انت تقول انك مستخدم قديم لاوامر الدوس

اذا تعرف ان البناء الهيكلي لامر

Del

هو

Del  filename

و filename

هنا عبارة عن بارميتير من نوع String يتم تمريره الى الامر Del

واذا قلنا

هكذا

Del *

فانها تمسح جميع الملفات

والسبب

ان ال * تعني اي اسم

== Any String

لذلك عندما يتم تنفيذ هذا الكود

نبدأ عند الامر Del

ثم نبحث عن اسم الملف الذي يفترض ان يكون بعده ( وهو عبارة عن String)

اذا وجدنا ال *

فكأننا نقول للنظام خذ اسماء جميع الملفات والتي هي (String) وادخلها

على أنها بارميتير الى الامر Del

ونفس الشئ مع الامر

java test

ادخل جميع اسماء الملفات اللي موجودة في المجلد الى البرنامج على هيئة

String

يعني الموضوع كله على بعضه String في String

أرجو أن أكون قد وضحت .....

أنتظر ردك

هذا الموضوع مغلق.

مواضيع مشابهة