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

كيف احصل على عدد الملفات على الجهاز

مغلق
بدأه hamzalion في 21 أكتوبر 2007 · 16 رد · 1,197 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في شي طريقة للحصول على عدد الملفات على الهارد؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#2

نعم هناك طريقه

اقرأ عن الكلاس File

#3

كود سريع لإعادة الذاكره :)

اتمنى ان تجربه واذا ضبط معك اتمنى اخباري لماذا -2 ؟؟

public class Main {

	public static void main(String [] args){
	File root=new File("C:\\");
	List<String> list=new ArrayList<String>();
	  listFiles(root,list);
	  System.out.println(list);

	}
	public static void listFiles (File root, List<String> list ){

		File[] files=root.listFiles();

		   for(int i=0;i<files.length-2;i++){
			if(files.isDirectory())
				listFiles(files,list);
			else
				list.add(files.getName());

		}
	}
}
#4

السلام عليكم

باستخدام العودية شتغلتا من زمان بس البرنامج اثناء التنفيذ يطول ويعطي خطأ out of memory على اجرائتك

ولكن كنت مشتغلا من فترة واشتغلت صح

بدي اذا في طريقة جاهزة في الجافا أو باستخدام API !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

اقتباس
List<String> list=new ArrayList<String>();

ممكن شرح <String> شو يعني ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

وشكرا على الرد

تم تعديل هذه المشاركة بواسطة hamzalion في 21 أكتوبر 2007 في 22:06

#6

ياأخي سبب خروج هذا الخطأ ان الهيب عندك لايتحمل النتائج

بالنسبه للدوال لايوجد داله تقوم بعمل ماتريد .. ولكن في الكود استخدمنا دوال لمساعدتنا فيما نريد

وإلا كم ستكتب سطر في برنامج لايستخدم مكتبات جافا

#7

عيسى لماذا -2 ؟؟

لا اعتقد انها صحيحة !!

منقطع من حين لاخر

#8

هلا والله مشرفنا وحبيبنا ابو الفؤاد

والله مدري ليش -2 ، كان الفجر وسهران ، ناسي وش كنت افكر فيه

لكن الاكيد انها ماصارت معي صح إلا ب -2

#9

هلا بيك مشرفنا الاخ عيسى :)

انا جربت الكود لم احصل على اي نتيجة متطابقة مع الويندوز ولا في اي حالة حتى -1 -2 او 0

لكن اقرب النتائج كانت عند استخدام length فقط !

مع وجود فارق 6 الاف ملف !!

منقطع من حين لاخر

#10

السلام عليكم

كيف حال المشرفين الجدد

أحلى قيادة في الدنيا وإن شاء الله بقيادتكم راح نحطم كل الأقسام المعادية :rolleyes: خصوصاً قسم . ولا بلاش :D

بالنسبة للسؤال أكيد الهيب مش راح يستحمل لأن البرنامج بيخزن أسامي كل الملفات الي على قرص السي

أنا عدلت على كود الأخ عيسى والبرنامج جاب العدد بالتمام والكمال

import java.io.File;

public class Main {

	private static long counter;
	public static void main(String [] args){
	File root=new File("C:\\");
	  System.out.println(listFiles(root));

	}
	public static long listFiles (File root){

		File[] files=root.listFiles();
		for(int i=0;i<files.length;i++){
			if(files.isDirectory())
				listFiles(files);
			else
				counter++;

		}
		return counter;
	}
}

حاولت أسرع البرنامج باستخدام تعدد الخيوط لكني حصلت على نتيجة عكسية

فالبرنامج زاد بطأً على بطأ

لما راجعت الشيفرة وجدت أني استخدمت عملية التزامن synchronization

المشكلة أنها تقوم بعمل حمل زائد على الجهاز

بل إن عملية إنشاء الخيط أصلاً عملية زائدة

وفي النهاية الخوارزمية ستظل تعمل بتعقيد n

وعلى حسب علمي الخيوط في الجافا لا تعمل على أكثر من معالج

لكن مع كل هذا الكلام سأضع الشيفرة بين أيديكم لعل وعسى أن يكون لديكم شيء يفيدني

import java.io.File;

public class MainMulti {

	private static Long counter=new Long(0);
	public static void main(String [] args){
	File root=new File("C:\\");
	  System.out.println(listFiles(root));

	}
	public static long listFiles (File root){

		final File[] files=root.listFiles();
		for(int i=0;i<files.length;i++){
			if(files.isDirectory()){
				if(files.listFiles().length>50){
					Thread t=new Thread(new Runnable(){

						public void run() {
							for(int i=0;i<files.length;i++){
								System.out.println(files.getName()+" "+i);
								if(files.isDirectory())
								listFiles(files);
								else
									synchronized (counter) {
										counter++;
									}
							}

						}

					});
					t.start();
				}
				else if(files.isDirectory())
					listFiles(files);
				else
					synchronized (counter) {
						counter++;
					}
			}
			else
				synchronized (counter) {
					counter++;
				}

		}
		return counter;
	}
}
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

الـ Generics مدعومة في جافا 5 وما فوق على ما اعتقد !

بامكانك التخلي عنها اذا لم ترد تحديث الجافا

منقطع من حين لاخر

#13

شو مشان عدد الملفات على الهارد

عم يأخذ البرنامج وقت طويل لعدهم

معقول يندوز مو مخزن عدد الملفات في شى مكان بقدر اوصلوا يسرعة دون استخدام العودية

#14

أخي الكريم حتى ويندوز نفسه

يقوم بعملية عد الملفات عندما تريد عددها

الله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

جرب استخدام Multithreading لتحسين البرنامج بحيث يقوم اكثر من ثريد بعد الملفات داخل كل مجلد

لكن اتوقع لن تحصل على فرق كبير !

منقطع من حين لاخر

#16

أخي أبو فؤاد

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

لكني حصلت على نتيجة سيئة جداً بل إن البرنامج أصبح بطيء بشكل غير طبيعي

هل يمكنك أن تراجع البرنامج وتكتبلي ملاحظات عليه

الله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#17

جربت multithreading البطء موجودالبطء موجود

تم تعديل هذه المشاركة بواسطة hamzalion في 2 نوفمبر 2007 في 22:20

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…