جافا الحصول على حجم الملف
اليوم ، عند كتابة التعليمات البرمجية ، تحتاج إلى تنفيذ وظيفة الحصول على حجم الملف. يوجد حاليًا طريقتان للتنفيذ. واحد هو استخدام طريقة الملف () الملف ؛ والآخر هو استخدام طريقة FileInputStream المتاحة (). عندما لا يقوم InputStream بإجراء عملية قراءة ، يجب أن يكون حجم المتاحة () مساوياً لحجم الملف. ولكن عند التعامل مع الملفات الكبيرة ، تحدث المشكلات في الأخير. لنلقي نظرة:
في المثال ، استخدمت ملف صورة التثبيت لـ CentOS 6.5 ، مع الأخذ في الاعتبار أن هذا الملف كبير بما يكفي (كبير من 2 جيجابايت).
1. استخدم طريقة الملف ()
Public Static Void Main (String [] args) {file f = new file ("d: //centos-6.5-x86_64-bin-dvd1.iso") ؛ if (f.exists () && f.isfile ()) {logger.info (f.length ()) ؛ } آخر {logger.info ("الملف غير موجود أو ليس ملفًا") ؛ }}دعونا نلقي نظرة على الإخراج:
4467982336
والنتيجة هي 4.16 جيجابايت ، والتي تتوافق مع النتائج المعروضة على Windows.
بعد ذلك ، لنلقي نظرة على حجم الملف الذي تم الحصول عليه من خلال FileInputStream:
public static void main (string [] args) {fileInputStream fis = null ؛ TREE {file f = new file ("d: //centos-6.5-x86_64-bin-dvd1.iso") ؛ fis = جديد fileInputStream (f) ؛ logger.info (fis.available ()) ؛ } catch (استثناء e) {logger.error (e) ؛ } أخيرًا {if (null! = fis) {try {fis.close () ؛ } catch (ioException e) {logger.error (e) ؛ }}}}}فيما يلي نتائج التشغيل:
2147483647
هل هذه النتيجة تبدو مألوفة؟ إنه integer.max_value ، وهو الحد الأقصى للقيمة التي يمكن أن تمثلها عدد صحيح موقّع.
لذلك ، إذا قمت بتحويلها إلى وحدة مألوفة ، فما حجم حجم الملف الذي تم الحصول عليه بهذه الطريقة؟
إنه حوالي 2 جيجابايت ، وهو من الواضح أنه ليس النتيجة الصحيحة.
والسبب هو أن النوع الذي يتم إرجاعه بواسطة طريقة الطول () للملف طويل ، وأن القيمة القصوى للقيمة الإيجابية التي يمكن أن يمثلها النوع الطويل هي: 9223372036854775807. الحد الأقصى لحجم الملف الذي يمكن تحويله إلى الحد الأقصى للدعم هو: 8954730132868714 EB. سيتم استخدام ترتيب الحجم هذا لسنوات عديدة في تاريخ تنمية تكنولوجيا المعلومات البشرية. قيمة إرجاع طريقة FileInputStream المتاحة () هي int. تم تقديم نطاق التمثيل القصوى من قبل. الحد الأقصى لحجم الملف الذي يمكن دعمه هو: 1.99 جيجابايت ، ويمكننا الوصول بسهولة إلى ترتيب الحجم هذا.
تمت إضافة في 31 مارس 2014:
ليس من الممكن قراءة أحجام الملفات الكبيرة لطرق البث ، ولكن لم يعد بإمكانك استخدام الحزمة التقليدية ضمن Java.io.*. تحتاج هنا إلى استخدام الأداة الجديدة ضمن Java.nio.* - Filechannel. لنلقي نظرة على رمز العينة التالي:
public static void main (string [] args) {filechannel fc = null ؛ TREE {file f = new file ("d: //centos-6.5-x86_64-bin-dvd1.iso") ؛ if (f.exists () && f.isfile ()) {fileInputStream fis = new FileInputStream (f) ؛ fc = fis.getChannel () ؛ logger.info (fc.size ()) ؛ } آخر {logger.info ("الملف غير موجود أو ليس ملفًا") ؛ }} catch (fileNotfoundException e) {logger.error (e) ؛ } catch (ioException e) {logger.error (e) ؛ } أخيرًا {if (null! = fc)) {try {fc.close () ؛ } catch (ioException e) {logger.error (e) ؛ }}}}}تتوافق النتائج التي تم الحصول عليها بعد استخدام Filechannel مع الحالة الأولى ، واصفًا بدقة الحجم الدقيق للملف.
هذا يذكر أيضًا جميع الزملاء التقنيين بأنه عند قراءة الملفات الكبيرة ، يجب أن تكون حذراً بشأن البيانات من النوع الواحد لتجنب الأخطاء المخفية ومن الصعب تحديد موقعها.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!