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

标签 java android file file-io

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

请注意我的 list 包括<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:为什么这行不通,而恕我直言应该行?

最佳答案

像这样尝试...

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

关于java - 在 Android 上创建临时文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317934/

相关文章:

java - Android 多媒体服务 - 简单问题

android - 如何在安卓汉堡包菜单图标上实现徽章计数器

java - 通过 REST Web 服务发送字节数组并接收字符串

c# - 使用sftp将文件上传到服务器主机

java - 忽略重复触发的事件

java - 如何使用jdbcTemplate为pojo类变量设置多行

java - 通用工厂定义选项

android - 带有数字 EditText 字段的警报对话框

file - 文本文件和二进制文件有什么区别。您如何决定何时使用什么?

java - 无法从给定来源创建信封