我想将内部存储上的文件保存到特定文件夹中。我的代码是:
File mediaDir = new File("media");
if (!mediaDir.exists()){
mediaDir.createNewFile();
mediaDir.mkdir();
}
File f = new File(getLocalPath());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.close();
getLocalPath
返回/data/data/myPackage/files/media/qmhUZU.jpg
但是当我想创建媒体文件夹时,我得到异常“java.io.IOException:只读文件系统”。有任何想法如何在文件夹媒体中的内部手机存储上写我的文件?感谢。
答案 0 :(得分:22)
你应该像这样使用ContextWrapper:
ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);
与往常一样,请参阅documentation,ContextWrapper可提供很多内容。
答案 1 :(得分:2)
您应该创建media
dir附加到getLocalPath()
返回的内容。
答案 2 :(得分:2)
我也得到了同样的错误。这是修复。当您指定要写入的位置时,Android会自动将您的路径解析为/data/
或/mnt/sdcard/
。让我解释一下。
如果执行以下语句:
File resolveMe = new File("/data/myPackage/files/media/qmhUZU.jpg");
resolveMe.createNewFile();
它将解析Android中较高位置的根/data/
的路径。
我想到了这一点,因为在我执行下面的代码之后,它被自动放在根/mnt/
中而没有我自己翻译任何内容。
File resolveMeSDCard = new File("/sdcard/myPackage/files/media/qmhUZU.jpg");
resolveMeSDCard.createNewFile();
快速解决方法是更改以下代码:
File f = new File(getLocalPath().replace("/data/data/", "/"));
希望这有帮助
答案 3 :(得分:0)
撰写文件
将文件保存到内部存储时,可以通过调用以下两种方法之一获取相应的目录作为文件:
getFilesDir()
Returns a File representing an internal directory for your app.
getCacheDir()
Returns a File representing an internal directory for your
app's temporary cache files.
Be sure to delete each file once it is no longer needed and implement a reasonable
size limit for the amount of memory you use at any given time, such as 1MB.
警告:如果系统存储空间不足,可能会在没有警告的情况下删除缓存文件。
答案 4 :(得分:-2)
嗨试试这个会在里面创建目录+文件
File mediaDir = new File("/sdcard/download/media");
if (!mediaDir.exists()){
mediaDir.mkdir();
}
File resolveMeSDCard = new File("/sdcard/download/media/hello_file.txt");
resolveMeSDCard.createNewFile();
FileOutputStream fos = new FileOutputStream(resolveMeSDCard);
fos.write(string.getBytes());
fos.close();
System.out.println("Your file has been written");