我有以下问题。我想把一个名为data.xml的文件放在sdcard/appname文件夹中,并用它来读取和写入应用程序数据。
所以,当我的主要活动创建时,我需要检查这个文件是否存在:
public class appname extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.no_elements_l);
File file = getBaseContext().getFileStreamPath("/sdcard/appname/data.xml");
if(file.exists()) {
return;
} else {
// create a File object for the parent directory
File MTdirectory = new File("/sdcard/appname/");
// have the object build the directory structure, if needed.
MTdirectory.mkdirs();
// create a File object for the output file
File outputFile = new File(MTdirectory, "data.xml");
// now attach the OutputStream to the file object, instead of a String representation
FileOutputStream DataFile = new FileOutputStream(outputFile);
}
但我在最后一行有未处理的异常类型FileNotFoundException。怎么了?使用权限WRITE_EEXTERNAL_STORAGE已添加到清单中。
不要硬编码SDCard文件路径。不同的设备和API可能会有所不同。
例如,Froyo是/mnt/sdcard/
,而我的Galaxy Nexus(JellyBean)是/storage/sdcard0/
Android开发者指南建议使用Environment.getExternalStorageDirectory()
试着这样做:
// Some Code
String path = Environment.getExternalStorageDirectory().getPath() + "/appname/";
File file = getBaseContext().getFileStreamPath(path);
// More Code
路径"/sdcard/appname"是否存在?在检查子目录"appname"之前,先检查文件。在你试图访问里面的文件之前,你需要检查它是否存在
此外,如果您只是需要该文件来读写应用程序数据,为什么不使用内部存储-少一个清单权限:)->在此处读取内部存储