دانستنی‌ها

folder.listFiles ممکن است خطای NullPointer پرتاب کند

اگر از دستور folder.listFiles() بیش از یکبار در کدتان استفاده می‌کنید، ممکن است با خطای NullPointer روبرو شوید. 

اگر کد زیر را در IntelliJ IDEA بزنید با یک هشدار روبرو می‌شوید:

File folder = new File("path");
if(folder.listFiles() != null) {
    for(File file : folder.listFiles()) {
        System.out.println(file.getName());
    }
}

در این هشدار گفته می‌شود

Dereference of ‘folder.listFiles()’ may produce ‘java.lang.NullPointerException

با توجه به اینکه در خط دوم صراحتا null نبودن در حال بررسی است شاید چنین هشداری عجیب به نظر برسد. اما در واقع این بررسی بی‌‌مورد است. listFiles() در هر فراخوانی دایرکتوری جاری را جستجو می‌کند. پس با دو فراخوانی در کد بالا، دایرکتوری جاری در دومین اجرا ممکن است خالی شده باشد هرچند در اولین فراخوانی خالی نبوده است.

این راه حل بهتری است:

File[] files = folder.listFiles();
if(files != null) {
    for(File file : files) {
        System.out.println(file.getName());
    }
}

حالا تابع listFiles() تنها یک بار فراخوانی می‌شود پس دایرکتوری بین دو فراخوانی نمی‌تواند خالی شده باشد.

منبع:

https://dzone.com/articles/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا