java – 在Android上创建临时文件的最佳方式是什么?

那么这并不完全是一个问题,因为我并没有真正地“停留在我的代码上”,但是我发现一些关于访问外部存储和File.createTempFile()方法的 Android API有一些奇怪的行为,想了解发生了什么…

请注意,我的清单不包括< uses-permission android:name =“android.permission.WRITE_EXTERNAL_STORAGE”>.

第1部分 :

我有以下代码作为一个魅力工作:

File tempFile = new File(Environment.getExternalStorageDirectory(),"my_temp_file.png");

它为我创建一个临时文件,我可以在其中编写数据没有任何麻烦.

问题1:为什么它的工作,因为我不应该在我的SDCard有写权限?

第2部分 :

我已经尝试改变我的代码来使用createTempFile,这是创建临时文件的官方方法.所以我试过:

File tempFile = File.createTempFile("my_temp","png",Environment.getExternalStorageDirectory());

并在我的manifest.xml中添加了WRITE_EXTERNAL_STORAGE.你猜怎么了 ?这不行,我得到一个java.io.IOException:

09-07 14:07:29.061: E/_CLOG(19982): java.io.IOException: Permission denied
09-07 14:07:29.061: E/_CLOG(19982):     at java.io.File.createNewFileImpl(Native Method)
09-07 14:07:29.061: E/_CLOG(19982):     at java.io.File.createNewFile(File.java:1257)
09-07 14:07:29.061: E/_CLOG(19982):     at java.io.File.createTempFile(File.java:1322)
09-07 14:07:29.061: E/_CLOG(19982):     at com.(...).onClick(ProfileImageUpdater.java:58)

问题2:为什么这不行,而imho应该?

解决方法

尝试这样…
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix","extension",outputDir);

编辑:

对于问题2

可能是以下链接的问题

Environment.getExternalStorageDirectory does not return the path to the removable storage

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...