如何在Android内部存储上创建文件?

时间:2011-02-16 13:53:22

标签: android file storage internal

我想将内部存储上的文件保存到特定文件夹中。我的代码是:

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:只读文件系统”。有任何想法如何在文件夹媒体中的内部手机存储上写我的文件?感谢。

5 个答案:

答案 0 :(得分:22)

你应该像这样使用ContextWrapper

ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);

与往常一样,请参阅documentationContextWrapper可提供很多内容。

答案 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");