我在内存中写了一个文件:
byte[] data = ... // (A buffer containing wav data)
String filename = context.getFilesDir().getAbsolutePath() + "/newout.wav";
File file = new File(filename);
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
然后我尝试播放它:
MediaPlayer player = new MediaPlayer();
player.setDataSource(filename);
player.prepare();
player.setLooping(false);
player.start();
但是prepare()
失败了:
java.io.IOException: Prepare failed.: status=0x1
我检查了该文件,发现它的权限是-rw-------
。我将其更改为-rw-r--r--
,然后成功播放。
那么为什么我的应用程序可以写一个文件,但无法读取它?如何让FileOutputStream
设置权限?
答案 0 :(得分:2)
要将programaticaly文件权限更改为-rw-r - r--你需要做这样的smoething:
Process process = null;
DataOutputStream dataOutputStream = null;
try {
process = Runtime.getRuntime().exec("su");
dataOutputStream = new DataOutputStream(process.getOutputStream());
dataOutputStream.writeBytes("chmod 644 FilePath\n");
dataOutputStream.writeBytes("exit\n");
dataOutputStream.flush();
process.waitFor();
} catch (Exception e) {
return false;
} finally {
try {
if (dataOutputStream != null) {
dataOutputStream.close();
}
process.destroy();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
答案 1 :(得分:1)
如果您打开文件,则默认模式为Context.MODE_PRIVATE
,例如如在
File file = new File(context.getFilesDir(), filename);
String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
(摘自the documentation)。模式MODE_WORLD_READABLE
和MODE_WORLD_WRITABLE
已弃用,不适用于较新的设备。所以我说你应该写在外部存储上,以便将内容提供给其他应用程序。
注意:根据documentation:
外部存储 "它具有世界可读性,因此保存在此处的文件可能会在您无法控制的范围内阅读。"