直接看代码:
Resources myResources = getResources(); InputStream myFile = myResources.openRawResource(R.raw.myfilename);
很多文件操作的类还是在java.io.File包中,Android也提供了一些指定的工具方法去管理文件,如:
1.deleteFile 使你能够移除被当前APP所创建的文件。
2.fileList 返回一个包含所有文件的字符串数组。
这些方法对于清理临时文件将非常有用,如果你的App奔溃了,或者不可预知的被杀。
大多APP都会考虑的事儿,就是相对于APP创建的文件,或者下载的文件应该存放在哪儿?
有2种方式去存储:内部或者外部。
注意:非常重要的一点要注意的是,存储在外部介质的文件,比如SD卡,是没有安全保障的,任何其它的App可以修改或者删除它。还有就是:文件存放在外部介质并非所有时候都有用,比如SD卡被拔出等。
安卓提供2个一致的方法,通过App Context,getDir和getExternalFilesDir,都将返回一个包含路径的文件对象,前者是内部App存储目录,后者则是外部。
注意:但存放在这些文件夹或者子文件夹下的文件,一旦APP卸载,都会被删除。getExternalFilesDir是API level 8(Android 2.2)引入的。如果想支持更早的版本,你可以调用Environment.getExternalStorageDirectory返回一个外部存储的根路径。
注意:这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。
例子:
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); }