最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中Bitmap、File與Uri之間的簡(jiǎn)單記錄

 更新時(shí)間:2019年02月28日 11:51:46   作者:難得糊涂與君勉  
這篇文章主要給大家介紹了關(guān)于Android中Bitmap、File與Uri之間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

簡(jiǎn)介:

感覺Uri 、File、bitmap 比較混亂,這里進(jìn)行記載,方便以后查看.下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

Bitmap、File與Uri

1、將一個(gè)文件路徑path轉(zhuǎn)換成File

String path ;
File file = new File(path)

2、講一個(gè)Uri轉(zhuǎn)換成一個(gè)path

以選擇一張圖片為例:

String path = FileTools.getRealPathFromUri(content,uri);
//自定義方法在下面
 public static String getRealPathFromUri(Context context, Uri uri) {

 if (null == uri) return null; //傳入的Uri為空,結(jié)束方法

 final String scheme = uri.getScheme(); //得到Uri的scheme

 String realPath = null;

 if (scheme == null)
  realPath = uri.getPath(); //如果scheme為空 
 else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
  realPath = uri.getPath(); //如果得到的scheme以file開頭
 } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
  //得到的scheme以content開頭
  Cursor cursor = context.getContentResolver().query(uri,
   new String[]{MediaStore.Images.ImageColumns.DATA},
   null, null, null);
  if (null != cursor) {
  if (cursor.moveToFirst()) {
   int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
   if (index > -1) {
   realPath = cursor.getString(index);
   }
  }
  cursor.close(); //必須關(guān)閉
  }
 }
 
//經(jīng)過(guò)上面轉(zhuǎn)換得到真實(shí)路徑之后,判斷一下這個(gè)路徑,如果還是為空的話,說(shuō)明有可能文件存在于外置sd卡上,不是內(nèi)置sd卡.
 if (TextUtils.isEmpty(realPath)) {
  if (uri != null) {
  
  String uriString = uri.toString();
  int index = uriString.lastIndexOf("/"); //匹配 / 在一個(gè)路徑中最后出現(xiàn)位置

  String imageName = uriString.substring(index);
  //通過(guò)得到的最后一個(gè)位置,然后截取這個(gè)位置后面的字符串, 這樣就可以得到文件名字了 

  File storageDir;

  storageDir = Environment.getExternalStoragePublicDirectory(
   Environment.DIRECTORY_PICTURES); //查看外部?jī)?chǔ)存卡公共照片的文件

  File file = new File(storageDir, imageName);
  //自己創(chuàng)建成文件,

  if (file.exists()) {
   realPath = file.getAbsolutePath();
  } else {
//  //那么存儲(chǔ)在了外置sd卡的應(yīng)用緩存file中
   storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
   File file1 = new File(storageDir, imageName);
   realPath = file1.getAbsolutePath();
  }
  }
 }
 return realPath;

 

 比如我在android 8.0 上運(yùn)行的時(shí)候
 選擇照片之后的Uri : content://media/external/images/media/568344
 進(jìn)行上面方法轉(zhuǎn)換完之后: /storage/emulated/0/com.appben.appche/browser-photos/1550297407488.jpg
 

 }

3、File 轉(zhuǎn)換成path

String path = file.getPath();
將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。所得到的字符串使用默認(rèn)名稱分隔符來(lái)分隔名稱序列中的名稱。

String path = file.getAbsolutePath();
如果此抽象路徑名已經(jīng)是絕對(duì)路徑名,則返回該路徑名字符串,這與 getPath() 方法一樣。如果此抽象路徑名是空的抽象路徑名,則返回當(dāng)前用戶目錄的路徑名字符串,
該目錄由系統(tǒng)屬性 user.dir 指定。否則,使用與系統(tǒng)有關(guān)的方式分析此路徑名。
在 UNIX 系統(tǒng)上,通過(guò)根據(jù)當(dāng)前用戶目錄分析某一相對(duì)路徑名,可使該路徑名成為絕對(duì)路徑名。在 Microsoft Windows 系統(tǒng)上,
通過(guò)由路徑名指定的當(dāng)前驅(qū)動(dòng)器目錄(如果有)來(lái)分析某一相對(duì)路徑名,
可使該路徑名成為絕對(duì)路徑名;否則,可以根據(jù)當(dāng)前用戶目錄來(lái)分析它。

getCanonicalPath
規(guī)范路徑名是絕對(duì)路徑名,并且是惟一的。規(guī)范路徑名的準(zhǔn)確定義與系統(tǒng)有關(guān)。如有必要,此方法首先將路徑名轉(zhuǎn)換成絕對(duì)路徑名,
這與調(diào)用 getAbsolutePath() 方法的效果一樣,然后用與系統(tǒng)相關(guān)的方式將它映射到其惟一路徑名。
這通常涉及到從路徑名中移除多余的名稱(比如 "." 和 "..")、分析符號(hào)連接(對(duì)于 UNIX 平臺(tái)),以及
將驅(qū)動(dòng)器名轉(zhuǎn)換成標(biāo)準(zhǔn)大小寫形式(對(duì)于 Microsoft Windows 平臺(tái))。
表示現(xiàn)有文件或目錄的每個(gè)路徑名都有一個(gè)惟一的規(guī)范形式。表示非存在文件或目錄的每個(gè)路徑名也有一個(gè)惟一的規(guī)范形式
。非存在文件或目錄路徑名的規(guī)范形式可能不同于創(chuàng)建文件或目錄之后同一路徑名的規(guī)范形式。
同樣,現(xiàn)有文件或目錄路徑名的規(guī)范形式可能不同于刪除文件或目錄之后同一路徑名的規(guī)范形式。

下面是參看文章中提到的一個(gè)例子

https://blog.csdn.net/qq_39949109/article/details/80609472

File file = new File(".\\test1.txt");
File file = new File("D:\\workspace\\test\\test1.txt");
 System.out.println("-----默認(rèn)相對(duì)路徑:取得路徑不同------");
 System.out.println(file1.getPath());
 System.out.println(file1.getAbsolutePath());
 System.out.println("-----默認(rèn)絕對(duì)路徑:取得路徑相同------");
 System.out.println(file2.getPath());
 System.out.println(file2.getAbsolutePath());


結(jié)果是:
-----默認(rèn)相對(duì)路徑:取得路徑不同------
.\test1.txt
D:\workspace\test\.\test1.txt
-----默認(rèn)絕對(duì)路徑:取得路徑相同------
D:\workspace\test\test1.txt
D:\workspace\test\test1.txt


 File file = new File("..\\src\\test1.txt");
 System.out.println(file.getAbsolutePath());
 System.out.println(file.getCanonicalPath());
//得到的結(jié)果
D:\workspace\test\..\src\test1.txt
D:\workspace\src\test1.txt

4、URI 與Uri的區(qū)別

URI 是java.net的子類

Uri 是android.net的子類,Uri不能被實(shí)例化

5、URI 轉(zhuǎn)換成 File

File file = null;
try{
 file = new File(new URI(uri.toString()));
}catch(URISyntaxException e){
 e.printStackTrace();
}

6、File 轉(zhuǎn)換成URI

URI uri = file.toURI();

7、Path 轉(zhuǎn)換成Uri

Uri uri = Uri.parse(path);

8、圖片的Uri轉(zhuǎn)Bitmap

Bitmap bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri))

9、File 轉(zhuǎn)到bitmap

Bitmap bitmap = BitmapFactory.decodeFile(file.getPath); //這個(gè)file要是真實(shí)路徑創(chuàng)建的file

10、bitmap 轉(zhuǎn) file,可以理解為將bitmap進(jìn)行保存.

//自己創(chuàng)建想要保存的文件的文件對(duì)象
BuffferedOutPutStream bos = 
new BufferedOutputStream(new FileOutputStream(file));
bos.flush;
bos.close;

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android開發(fā)中的ViewModel使用實(shí)戰(zhàn)案例

    Android開發(fā)中的ViewModel使用實(shí)戰(zhàn)案例

    在Android應(yīng)用開發(fā)中,ViewModel作為架構(gòu)組件,重要的功能是管理UI數(shù)據(jù)與生命周期,文章深入分析ViewModel如何感知View的生命周期,以及其核心優(yōu)勢(shì),包括生命周期感知、數(shù)據(jù)持久化和與UI層解耦,幫助開發(fā)者利用ViewModel優(yōu)化應(yīng)用架構(gòu),需要的朋友可以參考下
    2024-10-10
  • Android?Jetpack組件ViewModel基本用法詳解

    Android?Jetpack組件ViewModel基本用法詳解

    這篇文章主要為大家介紹了Android?Jetpack組件ViewModel基本用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android Studio添加日志過(guò)濾方式

    Android Studio添加日志過(guò)濾方式

    這篇文章主要介紹了Android Studio添加日志過(guò)濾方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 深入理解Android中的Window和WindowManager

    深入理解Android中的Window和WindowManager

    這篇文章給大家介紹了Window和WindowManager知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-02-02
  • Android view自定義帶文字帶進(jìn)度的控件

    Android view自定義帶文字帶進(jìn)度的控件

    這篇文章主要為大家詳細(xì)介紹了Android view自定義帶文字帶進(jìn)度的控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android識(shí)別預(yù)裝的第三方App方法實(shí)例

    Android識(shí)別預(yù)裝的第三方App方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Android如何識(shí)別預(yù)裝的第三方App的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Android 游戲開發(fā)入門簡(jiǎn)單示例

    Android 游戲開發(fā)入門簡(jiǎn)單示例

    本文主要介紹Android 游戲開發(fā),這里整理了詳細(xì)的開發(fā)游戲的資料,并提供簡(jiǎn)單的游戲示例代碼,有興趣的同學(xué)可以參考下
    2016-08-08
  • Android BaseAdapter應(yīng)用實(shí)例

    Android BaseAdapter應(yīng)用實(shí)例

    這篇文章主要介紹了Android BaseAdapter應(yīng)用方法,結(jié)合生成聯(lián)系人Items的實(shí)例形式分析了BaseAdapter的使用技巧,需要的朋友可以參考下
    2016-01-01
  • Fragment通過(guò)FragmentManager實(shí)現(xiàn)通信功能詳細(xì)講解

    Fragment通過(guò)FragmentManager實(shí)現(xiàn)通信功能詳細(xì)講解

    這篇文章主要介紹了Fragment通過(guò)FragmentManager實(shí)現(xiàn)通信功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • Android內(nèi)存溢出及內(nèi)存泄漏原因進(jìn)解析

    Android內(nèi)存溢出及內(nèi)存泄漏原因進(jìn)解析

    這篇文章主要介紹了Android內(nèi)存溢出及內(nèi)存泄漏原因解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論

新巴尔虎右旗| 筠连县| 南汇区| 开远市| 康平县| 永胜县| 河间市| 克山县| 汝城县| 宣汉县| 内江市| 思茅市| 华坪县| 岑溪市| 贵港市| 云南省| 子洲县| 乌恰县| 定西市| 叶城县| 乐都县| 贞丰县| 黄石市| 双桥区| 宁化县| 铜陵市| 四川省| 当涂县| 廊坊市| 绥阳县| 麻江县| 宁波市| 宿迁市| 林芝县| 遂平县| 浙江省| 子洲县| 松江区| 同仁县| 桐庐县| 广宁县|