วิธีที่ดีที่สุดในการสร้างไฟล์ชั่วคราวใน Android คืออะไร
สามารถใช้File.createTempFileได้หรือไม่ เอกสารมีความคลุมเครือเกี่ยวกับเรื่องนี้
โดยเฉพาะอย่างยิ่งจะไม่ชัดเจนเมื่อลบไฟล์ชั่วคราวที่สร้างขึ้นด้วยFile.createTempFile
ถ้าเคย
วิธีที่ดีที่สุดในการสร้างไฟล์ชั่วคราวใน Android คืออะไร
สามารถใช้File.createTempFileได้หรือไม่ เอกสารมีความคลุมเครือเกี่ยวกับเรื่องนี้
โดยเฉพาะอย่างยิ่งจะไม่ชัดเจนเมื่อลบไฟล์ชั่วคราวที่สร้างขึ้นด้วยFile.createTempFile
ถ้าเคย
คำตอบ:
นี่คือสิ่งที่ฉันมักจะทำ:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
สำหรับการลบพวกเขาฉันก็ไม่แน่ใจเหมือนกัน เนื่องจากฉันใช้สิ่งนี้ในการติดตั้งแคชฉันจึงลบไฟล์ที่เก่าที่สุดด้วยตนเองจนกว่าขนาดไดเรกทอรีแคชจะลดลงตามค่าที่ตั้งไว้
แนวทางปฏิบัติที่ดีที่สุดสำหรับไฟล์ชั่วคราวทั้งภายในและภายนอก :
หากคุณต้องการแคชข้อมูลบางส่วนแทนที่จะเก็บไว้อย่างถาวรคุณควรใช้
getCacheDir()
เพื่อเปิดไฟล์ที่แสดงถึงไดเรกทอรีภายในที่แอปพลิเคชันของคุณควรบันทึกไฟล์แคชชั่วคราวเมื่ออุปกรณ์มีพื้นที่เก็บข้อมูลภายในต่ำ Android อาจลบไฟล์แคชเหล่านี้เพื่อกู้คืนพื้นที่ อย่างไรก็ตามคุณไม่ควรพึ่งพาระบบเพื่อล้างไฟล์เหล่านี้ให้คุณ คุณควรบำรุงรักษาไฟล์แคชด้วยตัวเองและอยู่ในพื้นที่ จำกัด ที่เหมาะสมเช่น 1MB เมื่อผู้ใช้ถอนการติดตั้งแอปพลิเคชันของคุณไฟล์เหล่านี้จะถูกลบออก
getExternalCacheDir()
เปิดแฟ้มที่หมายถึงไดเรกทอรีจัดเก็บข้อมูลภายนอกที่คุณควรบันทึกไฟล์แคชโทร หากผู้ใช้ถอนการติดตั้งแอปพลิเคชันของคุณไฟล์เหล่านี้จะถูกลบโดยอัตโนมัติคล้ายกับ
ContextCompat.getExternalFilesDirs()
ที่ได้กล่าวมานี้คุณยังสามารถเข้าถึงไดเรกทอรีแคชบนจัดเก็บข้อมูลภายนอกรอง (ถ้ามี)ContextCompat.getExternalCacheDirs()
โดยการเรียกเคล็ดลับ: เพื่อรักษาพื้นที่ไฟล์และรักษาประสิทธิภาพแอปของคุณเป็นสิ่งสำคัญที่คุณจะต้องจัดการแคชไฟล์อย่างระมัดระวังและลบไฟล์ที่ไม่ต้องการอีกต่อไปตลอดอายุการใช้งานของแอป
สำหรับไฟล์ภายในชั่วคราวมี 2 ตัวเลือก
1
File file;
file = File.createTempFile(filename, null, this.getCacheDir());
2
File file
file = new File(this.getCacheDir(), filename);
ตัวเลือกทั้งสองเพิ่มไฟล์ในไดเรกทอรีแคชแอปพลิเคชันและสามารถล้างเพื่อให้มีพื้นที่ได้ตามต้องการ แต่ตัวเลือก 1 จะเพิ่มหมายเลขสุ่มที่ส่วนท้ายของชื่อไฟล์เพื่อให้ไฟล์ไม่ซ้ำกัน นอกจากนี้ยังจะเพิ่มนามสกุลไฟล์ซึ่งเป็น.tmp
ค่าเริ่มต้น แต่สามารถตั้งค่าเป็นอะไรก็ได้ผ่านการใช้พารามิเตอร์ที่ 2 การใช้วิธีการสุ่มหมายเลขแม้จะมีการระบุชื่อไฟล์มันไม่ได้อยู่ที่เดียวกับหมายเลขที่ถูกเพิ่มพร้อมกับนามสกุลต่อท้าย / ไฟล์ ( .tmp
ค่าเริ่มต้น) เช่นคุณระบุชื่อไฟล์ของคุณเป็นและออกมาเป็นinternal_file
internal_file1456345.tmp
ในขณะที่คุณสามารถระบุส่วนขยายที่คุณไม่สามารถระบุหมายเลขที่เพิ่ม อย่างไรก็ตามคุณสามารถค้นหาชื่อไฟล์ที่สร้างผ่านfile.getName();
แต่คุณจะต้องเก็บไว้ที่ไหนสักแห่งเพื่อให้คุณสามารถใช้เมื่อใดก็ตามที่คุณต้องการเช่นเพื่อลบหรืออ่านไฟล์ ดังนั้นด้วยเหตุนี้ฉันชอบตัวเลือกที่ 2 เนื่องจากชื่อไฟล์ที่คุณระบุคือชื่อไฟล์ที่สร้างขึ้น
คุณสามารถใช้ dir แคชใช้context.getCacheDir ()
File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
คุณสามารถใช้File.deleteOnExit()
วิธีการ
https://developer.android.com/reference/java/io/File.html#deleteOnExit ()
มันถูกอ้างอิงที่นี่https://developer.android.com/reference/java/io/File.html#createTempFile(java.lang.String , java.lang.String, java.io.File)
ทำได้ง่ายๆ ตามเอกสาร https://developer.android.com/training/data-storage/files
String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
picFile = new File(ProfileActivity.this.getCacheDir(),imageName);
และลบทิ้งหลังจากการใช้งาน
picFile.delete()