{"id":10398,"date":"2022-09-08T10:06:28","date_gmt":"2022-09-08T03:06:28","guid":{"rendered":"https:\/\/crocodic.com\/?p=10398"},"modified":"2023-10-06T06:51:33","modified_gmt":"2023-10-05T23:51:33","slug":"mendapatkan-absolute-path-pada-file","status":"publish","type":"post","link":"https:\/\/crocodic.com\/id\/mendapatkan-absolute-path-pada-file\/","title":{"rendered":"Mendapatkan Absolute Path Pada File Di Android Terbaru"},"content":{"rendered":"<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-cara-mendapatkan-absolute-path\">Cara mendapatkan absolute path<\/a><\/li><\/ul><\/div>\n\n\n<p>Sebagai Android <a href=\"https:\/\/crocodic.com\/id\/5-kesalahan-yang-sering-dilakukan-developer-mobile-apps\/\">Developer<\/a> sering kali kita bekerja dengan File. Misalnya, ketika kita mengembangkan sebuah <a href=\"https:\/\/crocodic.com\/id\/mobile-app-apa-yang-paling-dibutuhkan-pada-tahun-2025\/\">aplikasi<\/a> yang memungkinkan user untuk memilih gambar dan memperbarui foto profil mereka. Ketika user aplikasi memilih sebuah file gambar, biasanya kita mendapatkan object <a href=\"https:\/\/developer.android.com\/reference\/android\/net\/Uri\">Uri<\/a> sebagai hasil balik pilihan pengguna.<br><\/p>\n\n\n\n<p>Setelah mendapatkan Object <a href=\"https:\/\/developer.android.com\/reference\/android\/net\/Uri\">Uri<\/a>, selanjutnya kita proses object tersebut menjadi object <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/File\">File<\/a> guna mendapatkan absolute path dan di gunakan informasi ketika mengunggah file ke server.<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><br>```kt<br>File.getAbsolutePath()<br>```<br><\/pre>\n\n\n\n<p>Pada step ini mungkin kita mendapati sebuah error biasanya karena belum mendapat izin permission <a href=\"https:\/\/developer.android.com\/reference\/android\/Manifest.permission#READ_EXTERNAL_STORAGE\">READ_EXTERNAL_STORAGE<\/a> atau bahkan absolute path yang digunakan untuk keperluan upload ke server salah. Belum lagi bagaimana jika user memilih file dari penyimpanan cloud seperti Google Drive?&nbsp;<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <br>```kt<br>\/\/ contoh absolute path<br>\/\/ \/storage\/emulated\/0\/Android\/Pictures\/myImage.jpg<br>```<br><\/pre>\n\n\n\n<p>Pada artikel ini saya akan menunjukan bagaimana mendapatkan absolute path asli tanpa permission, bahkan ini bekerja jika pengguna memilih file dari penyimpanan cloud seperti Google Drive dan kompatibel dengan versi android terbaru.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-cara-mendapatkan-absolute-path\">Cara mendapatkan absolute path<br><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\"> <br>```kt<br>private val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -&gt;<br> if (result.resultCode == RESULT_OK) {<br> val uri: Uri = result.data?.data ?: return<br> }<br>}<br>```<br> <\/pre>\n\n\n\n<p>Pada kode di atas, saya menggunakan <a href=\"https:\/\/developer.android.com\/reference\/androidx\/activity\/result\/ActivityResultCaller#registerForActivityResult(androidx.activity.result.contract.ActivityResultContract%3CI,O%3E,androidx.activity.result.ActivityResultCallback%3CO%3E)\">registerForActivityResult<\/a> dan <a href=\"https:\/\/developer.android.com\/reference\/androidx\/activity\/result\/contract\/ActivityResultContracts.StartActivityForResult\">StartActivityForResult<\/a>, ini digunakan untuk menerima hasil balik file pilihan pengguna. Dan di dalamnya kita bisa mendapatkan object <a href=\"https:\/\/developer.android.com\/reference\/android\/net\/Uri\">Uri<\/a> sebagai representasi file pilihan pengguna.<br><\/p>\n\n\n\n<p>Setelah mendapatkan object <a href=\"https:\/\/developer.android.com\/reference\/android\/net\/Uri\">Uri<\/a>, selanjutnya kita akan mendapatkan object <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileInputStream\">FileInputStream<\/a> melalui object <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileDescriptor\">FileDescriptor<\/a>&nbsp; dengan meneruskan object Uri tersebut ke <a href=\"https:\/\/developer.android.com\/reference\/android\/content\/ContentResolver#openFileDescriptor(android.net.Uri,%20java.lang.String)\">openFileDescriptor<\/a> function.&nbsp;<br><\/p>\n\n\n\n<p><a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileDescriptor\">FileDescriptor<\/a> digunakan untuk membuat object <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileInputStream\">FileInputStream<\/a> dengan meneruskan <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileDescriptor\">FileDescriptor<\/a> sebagai constructor.<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <br>```kt<br>val fileDescriptor: FileDescriptor = contentResolver.openFileDescriptor(uri, \"r\")?.fileDescriptor<br>val inputStream = FileInputStream(fileDescriptor)<br>```<br> <\/pre>\n\n\n\n<p>Sekarang Anda sudah mendapatkan <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileInputStream\">FileInputStream<\/a>,&nbsp; selanjutnya tentukan lokasi penyimpanan file dan nama file. Gunakan file tersebut untuk membuat <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileOutputStream\">FileOutputStream<\/a>. Pada kasus ini kita akan simpan filenya di external specific directory dan akan kita beri nama file \u201cmyImage.jpg\u201d.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <br>```kt<br>val fileName = \"myImage.jpg\"<br>val primaryStorage: File = ContextCompat.getExternalFilesDirs(this, null)[0]<br>val outputFile: File = File(primaryStorage, fileName)<br>val outputStream = FileOutputStream(outputFile)<br>``<strong>`<\/strong><br> <\/pre>\n\n\n\n<p>Jika Anda perhatikan lagi kita sudah mendapatkan <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileInputStream\">FileInputStream<\/a> dan <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileOutputStream\">FileOutputStream<\/a> yang di simpan ke variabel inputStream dan ouputStream.&nbsp; Sekarang kita akan gunakan <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileInputStream\">FileInputStream<\/a> untuk di copy atau di salin ke <a href=\"https:\/\/developer.android.com\/reference\/java\/io\/FileOutputStream\">FileOutputStream<\/a> menggunakan extension function <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.io\/use.html\">use<\/a> yang sudah di sediakan oleh kotlin.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> <br>```kt<br>inputStream.use { input -&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;outputStream.use { output -&gt;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input.copyTo(output)&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>}<br><br>val absoluthPath = outputFile.absolutePath<br>\/\/ \/storage\/emulated\/0\/Android\/data\/com.example.myPicker\/files\/myImage.jpg<br>```<br> <\/pre>\n\n\n\n<p><em>Thats it<\/em>, sekarang Anda sudah bisa mendapatkan absolute path, bahkan jika pengguna memilih file dari google drive dan kompatibel dengan versi android terbaru.<\/p>\n\n\n\n<p>Semoga artikel dapat membantu Anda lebih memahami ketika bekerja file di Android. Anda dapat bereksplorasi ketika bekerja dengan file, Android menawarkan berbagai macam api yang memudahkan untuk bekerja dengan file. Contohnya alih alih menggunakan <a href=\"https:\/\/developer.android.com\/reference\/android\/content\/ContentResolver#openFileDescriptor(android.net.Uri,%20java.lang.String)\">openFileDescriptor<\/a>, Anda bisa menggunakan <a href=\"https:\/\/developer.android.com\/reference\/android\/content\/ContentResolver#openAssetFileDescriptor(android.net.Uri,%20java.lang.String)\">openAssetFileDescriptor<\/a>. <\/p>\n\n\n\n<p>Untuk kebutuhan pengembangan <a href=\"https:\/\/crocodic.com\/id\/flutter-vs-react-native-mana-yang-lebih-cocok-untuk-proyekmu\/\">mobile apps<\/a>, atau perbaikan mobile apps yang perusahaan anda miliki, kontak kami <a href=\"https:\/\/crocodic.com\/form-pemesanan-pengembangan-aplikasi-mobile-dan-web\/\">disini<\/a>. Kami tunggu!<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Author : Eka Bayu &#8211; Android Development <a href=\"https:\/\/crocodic.com\/id\/5-developer-mobile-app-terbaik-di-indonesia-tahun-2024\/\">Crocodic<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kita bisa lho, mendapatkan absolute path pada file bahkan jika file tersebut diambil dari google drive. Cara ini kompatibel dengan versi android terbaru!<\/p>","protected":false},"author":1,"featured_media":10399,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[151],"tags":[514],"class_list":["post-10398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mobile-apps-journal","tag-absolute-path"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/posts\/10398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/comments?post=10398"}],"version-history":[{"count":3,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/posts\/10398\/revisions"}],"predecessor-version":[{"id":11438,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/posts\/10398\/revisions\/11438"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/media\/10399"}],"wp:attachment":[{"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/media?parent=10398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/categories?post=10398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crocodic.com\/id\/wp-json\/wp\/v2\/tags?post=10398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}