
File: למרות שמה, היא מתארת קובץ או תיקייה. הבנאי מקבל נתיב. דרכה מקבלים את הנתיב המדויק, ואפשר ליצור קובץ או תיקייה שלא קיימים. הם יכולים להיות בדיסק של המכשיר או בזיכרון משותף כמו SD Card.getFilesDir: תיקייה פרטית של האפליקציה. אפליקציות אחרות והמשתמש לא ניגשים אליה, והיא נמחקת בהסרת האפליקציה. מתאימה לקבצים שרק האפליקציה משתמשת בהם. הנתיב הוא data, data, שם החבילה, files.getExternalFilesDir: תיקייה ספציפית לאפליקציה, אבל נגישה למשתמש, ונמחקת בהסרה. עם null מקבלים את תיקיית files בתוך storage, emulated, 0, Android, data וחבילת האפליקציה. עם קבוע (Music, Podcasts, Ringtones, Alarms, Notifications, Pictures, Movies) מקבלים תיקייה ייעודית לסוג התוכן.getExternalStorageDirectory ו-getExternalStoragePublicDirectory: תיקיות משותפות, בדרך כלל על SD Card. נגישות למשתמש ולאפליקציות אחרות, ונשארות אחרי הסרת האפליקציה. השנייה מקבלת קבוע כמו Environment.DIRECTORY_MOVIES, ואת התיקייה מקבלים ישירות תחת emulated 0 ולא בתוך חבילת האפליקציה.הטקסט המלא של הדקות הראשונות בהרצאה «The File System» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לנושא חדש שנקרא The File System, כלומר מערכת הקבצים והתיקיות באנדרואיד. כאן אנחנו הולכים לראות איך אנחנו יכולים ליצור קובץ, איך אנחנו יכולים לכתוב אליו, איך אנחנו יכולים לקרוא ממנו, מה ההבדל בין קבצי טקסט לקבצים בינאריים, איזה תיקיות קיימות במכשיר ואיך אנחנו יכולים
להגיע אליהם ועוד. אז בואו נתחיל. דבר ראשון, קיימת לנו באנדרואיד מחלקה שנקראת File, וזה שם שיכול טיפה לבלבל מפני שאנחנו יודעים שפייל זה בעצם קובץ אבל המחלקה פייל הספציפית הזאת מתארת לנו גם קובץ וגם תיקייה.
היא מקבלת לקונסטרקטור שלה נתיב או לקובץ או לתיקייה והיא מתארת את הקובץ או התיקייה האלה ומצביעה עליהם.
דרך המחלקה הזאת אנחנו יכולים להשיג את הטובת המדויקת שלהם, כלומר את המיקום איפה בדיוק הם נמצאים. אם לדוגמה הקובץ או התיקייה לא נמצאים, אנחנו יכולים דרך האובייקט הזה ליצור אותם.
הקובץ או התיקייה יכולים להיות על ה-hard disk של המכשיר עצמו, והקובץ או התיקייה יכולים להיות על Shared memory, איזשהו זיכרון שהוא יכול להיות משותף למספר מחשבים, לדוגמה SD card שאפשר לשלוף אותו ולהעביר אותו למחשב אחר.
אם שמנו עליו קבצים ותיקיות, אז הם כמובן יישארו איתו ויוכלו לעבור גם למקום אחר. איך אנחנו יכולים להשיג נתיבים של תיקיות? קיימות מספר פונקציות build-in באנדרואיד שדרכן אפשר להשיג כל מיני מיקומים של תיקיות במכשיר.
כל פונקציה כזאת מחזירה אובייקט פייל כמו שראינו, ודרך האובייקט פייל אנחנו יכולים להשיג את הנתיב הספציפי לתיקייה. פונקציות נפוצות כאלה get files dir, external files dir, get external storage directory ו-get external storage public directory.
כבר אנחנו הולכים לראות מה ההבדל בין כל אחת מהן ומה כל אחת מהן בדיוק מביאה לנו. נתחיל עם get files dir. get files dir מחזירה דירקטורי שהיא ספציפית לאפליקציה שלנו.
רק האפליקציה שלנו יכולה לגשת ולהשתמש בתיקייה הזאת ולא אפליקציות אחרות. היוזר לא יכול לגעת בתיקייה הזאת, היא בעצם נסתרת מהיוזר.
התיקיות האלה נמחקות אוטומטית כאשר מבצעים uninstall לאפליקציה. זאת אומרת שאם אנחנו רוצים שיהיה לנו איזושהי תיקייה או קובץ שהם לשימוש פנימי של האפליקציה ואנחנו לא רוצים שאף אחד יוכל להתעסק עם הקובץ הזה או עם התיקייה הזאת וזה אך ורק לאפליקציה,
get files dir היא הפונקציה המתאימה לנו. getExternalFilesDir מחזירה לנו גם כן תיקייה שהיא ספציפית לאפליקציה, אבל היא כן נגישה על ידי היוזר.
תיקיות כאלה גם נמחקות כאשר מבצעים uninstall לאפליקציה. getExternalStorageDirectory ו-getExternalStoragePublicDirectory מחזירות לנו תיקייה משותפת בדרך כלל התיקיות האלה יהיו על איזשהו זיכרון משותף כמו SD-Card.
אנחנו צריכים תמיד לבדוק האם באמת התיקייה שתיארנו על ידי הפונקציות האלה אכן קיימת. אם לא, אנחנו לא יכולים להשתמש איתה, כי יכול להיות שאנחנו חושבים שזה קיים על איזשהו זיכרון חיצוני, אבל בעצם כרגע היוזר הוציא את ה-SD-Card הזה וזה לא קיים שם.
התיקיות האלה כמובן נגישות על ידי היוזר והן לא נמחקות כאשר עושים uninstall לאפליקציה. אנחנו חייבים לבקש הרשאה בדרך כלל על ידי permission במניפסט עבור קריאה מהתיקיות החיצוניות האלה, ואם אנחנו רוצים לכתוב כמובן הרשאת כתיבה בדרך כלל במניפסט.
בואו נראה כל אחת מהפונקציות איפה בדיוק היא יוצרת לנו את הקובץ או התיקייה. אז get files dir יש לנו את התיקייה הראשית data בתוכה תיקייה נוספת data בתוכה יש את התיקייה של הpackage של האפליקציה שלנו ובתוכה תיקיית files כאן בעצם אנחנו יכולים ליצור קבצים או תיקיות כאשר אנחנו משתמשים ב-get files dir זאת אומרת get files
dir מחזירה לנו את הנתיב לתיקיית files הזאת וכאן אנחנו יכולים להיכנס פנימה וליצור עוד קבצים או תיקיות. get external files dir, כאשר אנחנו שולחים ל-null, מחזירה לנו את הנתיב המיוחד הזה, files בתוך הפאקג' של האפליקציה, אבל שימו לב שזה נמצא ב-storage, כלומר יש איזושהי תיקייה חיצונית שנקראת
storage, בתוכה יש emulated, דירו בדרך כלל, אנדרואיד, מכאן מתחיל דאטה, פאקד של האפליקציה הספציפית שלנו ופיילס. אם אנחנו שולחים איזשהו קבוע ספציפי מסדרת קבועים לגט אקסטרנל פיילס דיר, אז אנחנו נכנסים בדיוק לאותו המקום שהיינו מקודם, אבל לתיקייה שהיא מיוחדת עבור הקבוע הזה.
לדוגמה, עבור דירקטורי מיוזיק אנחנו מקבלים תיקייה ספציפית של מיוזיק. כמובן אמורה להכיל קבצי מוזיקה. אלו קבועים קיימים המאפשרים להביא לנו תיקיות ספציפיות.
אז יש לנו את הדירקטורי מיוזיק כמו שראינו אבל בנוסף יש לנו את פודקאסט שזה בעצם קבצי סאונד כאלה שאפשר להוריד מהאינטרנט, יש לנו רינגטונס עבור רינגטונים, יש לנו אלארמס עבור כל מיני קבצי סאונד של