بررسی کلاس File
جاوا علاوه بر پکیج io یک پکیج دیگه ای به اسم nio نیز برای کار با فایل ها داره.
داده های یک برنامه به طور موقت در طول زمان اجرای برنامه وجود دارن؛ وقتی برنامه متوقف میشه این داده ها
از بین میرن.
برای نگهداری داده ها به طور دائم نیاز داریم اونا رو داخل فضاهای ذخیرهساز دائمی از جمله هارد کامپیوتر
یا حافظه های micro-sd و... ذخیره کنیم.
برای این کار میتونیم از پکیج Input Output (IO) و یا کتابخونه ی پایگاه
داده در جاوا استفاده کنیم.
کلاس File از کلاس های مهم پکیج io در جاوا است این کلاس اساس همه ی عملیات io است. از این کلاس برای
دسترسی به فایل های کامپیوتر، گرفتن اطلاعات فایل و انجام عملیاتی از قبیل تغییر نام، حذف فایل و یا
ایجاد پوشه های جدید استفاده میکنیم.
کلاس File متد (تابع) های خوندن و نوشتن رو داده ها رو نداره برای خوندن و نوشتن رو داده ها، از کلاس های
دیگه در io استفاده میکنیم.
پکیج io در واقع یکی از پکیج های جاوا است اما در کاتلین هم مورد استفاده قرار میگیره.
در نمودار UML زیر به بررسی کانستراکتور (constructor) و متد (تابع) های پر کاربرد این کلاس
پرداختیم:
+File(String)
یک نمونه از کلاس File ایجاد می کنه و مقدار String مسیر فایل یا پوشه ی مد
نظر است.
+File(String,String)
یک نمونه از کلاس File ایجاد می کنه پارامتر ها از چپ parent مسیر پوشه ها و child مسیر پوشه یا
فایل داخل parent است.
+File(URI)
یک نمونه از File بر اساس uri توسط کلاس URI در جاوا ایجاد میکنه.
+exists(): boolean
بررسی میکنه آیا فایل در مسیر تعریف شده وجود داره یا خیر
+canRead(): boolean
بررسی میکنه آیا فایل قابل خوندن هست یا خیر.
+canWrite(): boolean
بررسی میکنه آیا فایل قابل نوشتن هست یا خیر.
+isDirectory(): boolean
بررسی می کنه فایل پوشه هست یا خیر.
+isFile(): boolean
بررسی میکنه نوع فایل در مسیر تعریف شده فایل هست یا خیر.
+isHidden(): boolean
بررسی میکنه فایل مخفیه یا نه.
+isAbsolute(): boolean
بررسی میکنه مسیر تعریف شده برای فایل یک مسیر کامل هست یا خیر.
+getAbsolutePath(): String
مقدار مسیر کامل رو به صورت String بر میگردونه.
+getPath(): String
مقدار مسیر رو به صورت String بر می گردونه.
+getName(): String
اسم فایل رو به صورت String بر میگردونه.
+getParent(): String
مسیر پوشه ای که فایل داخلش قرار داره رو به صورت String بر میگردونه.
+listFiles(): File[]
اگه مسیر تعریف شده برای کلاس File پوشه باشه یک لیست از محتوای داخل پوشه به
صورت آرایه ای از نوع File بر میگردونه.
+list(): String[]
اگه مسیر تعریف شده یک پوشه باشه آرایه ای از اسم فایل ها و پوشه های داخلشو
به صورت String بر میگردونه.
+delete(): boolean
فایل در مسیر تعریف شده رو حذف میکنه و اگه انجام بشه مقدار true بر
میگردونه. (اگه پوشه باشه باید محتوای داخل پوشه قبل از حذف پوشه حذف بشن).
+mkdir(): boolean
یک پوشه در مسیر تعریف شده ایجاد میکنه و اگه انجام بشه true بر میگردونه.
+mkdirs(): boolean
یک یا چند پوشه در صورت عدم وجود در مسیر تعریف شده ایجاد میکنه و اگه انجام
بشه true بر میگردونه.
+lastModified(): long
تاریخ اخرین تغییرات در فایل رو به صورت long بر میگردونه.
+renameTo(File): boolean
فایل موجود رو تغییر نام میده و اگه انجام بشه true بر میگردونه.
تعریف مسیر
برای کلاس File در جاوا و کاتلین به دو روش میتونیم مسیر پوشه یا فایل مورد نظر رو تعریف
کنیم.
۱- تعریف مسیر کامل که بهش (Absolute Path) میگیم.
۲- تعریف مسیر کوتاه یا خلاصه که بهش (Abstract Path) میگیم.
۱- تعریف مسیر absolute برای File
اگه مسیر تارگت رو به صورت کامل (از روت) تعریف کنیم، بهش مسیر کامل (absolute) میگیم.
فرض کنید در ویندوز داخل درایو c یک پوشه داریم به اسم Music و داخل پوشه یک آهنگ داریم به اسم
Haydeh.mp3 مسیر کامل فایل به صورت زیر است:
c:\Music\Haydeh.mp3
چون \ جزو کاراکتر های ویژه تو جاواست، باید دوتا \ قرار بدیم:
new File("c:\\Music\\Haydeh.mp3");
اگه سیستم عامل شبه یونیکس (لینوکس) باشه برای تعریف مسیر absolute باید مانند زیر عمل کنیم:
new File("/home/username/Music/Haydeh.mp3");
۲- تعریف مسیر خلاصه (abstract)
اگه شروع مسیر از پوشه ای باشه که برنامه اجرا شده، بهش مسیر abstract میگیم.
نحوه ی تعریف مسیر abstract در جاوا بین ویندوز و لینوکس مشابه یکدیگر است.
فرض کنید برنامه از یک پوشه قبل از پوشه ی Music اجرا شده، برای تعریف مسیر abstract مانند زیر عمل
میکنیم:
new File("Music/Haydeh.mp3");
مورد مطالعه (مثال)
در زیر هرکس میتونه مسیر مورد نظر خودشو بهجای پارامتر کانستراکتور قرار بده.
File file = new File("Path_To_File");
System.out.println("Does it exist? " + file.exists());
System.out.println("Is it Absolute? " + file.isAbsolute());
System.out.println("Absolute path: " + file.getAbsolutePath());
System.out.println("Can it be read? " + file.canRead());
System.out.println("Can it be written? " + file.canWrite());
System.out.println("Is it Hidden? " + file.isHidden());
System.out.println("Is it File? " + file.isFile());
System.out.println("Is it Directory? " + file.isDirectory());
System.out.println("Last modification date: " + java.util.Date(file.lastModified()));
val file = File("Path_To_File");
println("Does it exist? ${file.exists()}");
println("Is it Absolute? ${file.isAbsolute()}");
println("Absolute path: ${file.getAbsolutePath()}");
println("Can it be read? ${file.canRead()}");
println("Can it be written? ${file.canWrite()}");
println("Is it Hidden? ${file.isHidden()}");
println("Is it File? ${file.isFile()}");
println("Is it Directory? ${file.isDirectory()}");
println("Last modification date: ${java.util.Date(file.lastModified())}");
در مثال بالا چندتا از متد های پر کابرد کلاس File رو استفاده کردیم خودتون میتونید متد های دیگه ی این
کلاس، که در نمودار UML آورده شده رو
بررسی کنید.
خلاصه
برای خوندن و نوشتن داده ها رو حافظه ی دائمی از پکیج io در جاوا استفاده میکنیم.
کلاس File اساس همه ی عملیات های io در جاواست از این کلاس برای عملیاتی از جمله تغییر نام، حذف، گرفتن
اطلاعات فایل و یا ایجاد پوشه ی جدید استفاده میکنیم.
کلاس File متد های خوندن و نوشتن روی فایل رو نداره و برای این کار از کلاس های دیگه در پکیج io استفاده
میکنیم.
برای تعریف مسیر تارگت می تونیم به دو روش absolute یا abstract عمل کنیم.