android之File,Saving State,Preferences(二)

静态文件作为资源:

直接看代码:

Resources myResources = getResources(); 
InputStream myFile = myResources.openRawResource(R.raw.myfilename);

raw resource就是所谓的原生资源,存放在res/raw中,存放一些要预先存在的原生音频,文件之类的。像xml资源,R.raw.文件名。

 

文件管理的工具

很多文件操作的类还是在java.io.File包中,Android也提供了一些指定的工具方法去管理文件,如:

1.deleteFile 使你能够移除被当前APP所创建的文件。

2.fileList 返回一个包含所有文件的字符串数组。

这些方法对于清理临时文件将非常有用,如果你的App奔溃了,或者不可预知的被杀。

 

使用特定的App文件夹去存储文件

大多APP都会考虑的事儿,就是相对于APP创建的文件,或者下载的文件应该存放在哪儿?

有2种方式去存储:内部或者外部。

注意:非常重要的一点要注意的是,存储在外部介质的文件,比如SD卡,是没有安全保障的,任何其它的App可以修改或者删除它。还有就是:文件存放在外部介质并非所有时候都有用,比如SD卡被拔出等。

安卓提供2个一致的方法,通过App Context,getDir和getExternalFilesDir,都将返回一个包含路径的文件对象,前者是内部App存储目录,后者则是外部。

注意:但存放在这些文件夹或者子文件夹下的文件,一旦APP卸载,都会被删除。getExternalFilesDir是API level 8(Android 2.2)引入的。如果想支持更早的版本,你可以调用Environment.getExternalStorageDirectory返回一个外部存储的根路径。

getDir(String name, int mode)   name 就当做是子路径名 mode 有 MODE_PRIVATE,MODE_WORLD_READABLE,MODE_WORLD_WRITABLE
getExternalFilesDir(String type)  type有Environment.DIRECTORY_XXX

注意:这2个方法所涉及的文件与APP共存,若APP被卸载,则存放在这些文件夹或者子文件夹下的文件也会被删除。

 

创建私有的应用程序文件

安卓提供openFileInput和openFileOutput方法去简化读写存放在应用程序沙盒中的文件。

String FILE_NAME = “tempfile.tmp”;

// 创建一个相对私有与当前应用程序的输出文件流 
FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); 
// 创建一个输入文件流 
FileInputStream fis = openFileInput(FILE_NAME);

 

若openFileOutput这方法中的文件不存在,则安卓会默认帮你创建一个。此输出文件流默认行为是覆盖写的模式,如果你想追加写入则指定模式为Context.MODE_APPEND.

默认的,openFileOutput方法创建的文件时相对私有与当前的应用程序,其它应用程序是无法访问的。标准的方式在APP之间共享文件是去创建一个Content Provider. 其它的,你也可以指定模式为Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITABLE.这2种模式下的文件时可以被其它应用程序访问的。

使用Context.MODE_WORLD_WRITABLE模式:

String OUTPUT_FILE = “publicCopy.txt”; 
FileOutputStream fos = openFileOutput(OUTPUT_FILE, Context.MODE_WORLD_WRITEABLE);

那么如何获取到这些文件的路径呢?

答:

File file = getFilesDir(); 
Log.d(“OUTPUT_PATH_”, file.getAbsolutePath());

使用应用程序缓存文件区

安卓同样提供了2种,一个是受管理的内部缓存和一个不受管理的外部缓存。分别通过调用getCacheDir和getExternalCacheDir。同样,当应用程序被卸载的时候,存储在这些位置的文件也要被删除。还有,存放在内部缓存文件夹的,当系统存储空间不够的时候也会被删除。但是存放在外部缓存系统不予理会。

 

存储共有的可读文件

安卓2.2(API level 8)包含了一个方便的方法,Environment.getExternalStoragePublicDirectory。

Environment.getExternalStoragePublicDirectory(String type) type有Environment.DIRECTORY_XXX

例子:

String FILE_NAME = “MyMusic.mp3”;

File path = Environment.getExternalStoragePublicDirectory( 
              Environment.DIRECTORY_MUSIC);

File file = new File(path, FILE_NAME);

try { 
  path.mkdirs(); 
  [... Write Files ...] 
} catch (IOException e) { 
  Log.d(TAG, “Error writing “ + FILE_NAME, e); 
}

注意:getExternalStoragePublicDirectory方法可能返回的目录若不存在的,你需要检验。上述代码已经展示了。

转载于:https://my.oschina.net/wangjunhe/blog/108477

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值