在Android应用中,你可以使用多种方式来保存和打开文件。下面是一些常用的方法:
保存文件
Android中的文件操作主要分为两种:内部存储 (Internal Storage) 和外部存储 (External Storage)。
内部存储
内部存储是应用私有的,其他应用无法访问。适用于私密数据存储。
1. 保存文件
java
String filename = "myfile";
String fileContents = "Hello World";
FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(fileContents.getBytes());
fos.close();
外部存储
外部存储适用于用户可以浏览的文件,通常需要权限。
1. 保存文件
需要在`AndroidManifest.xml`中添加权限:
xml
java
String filename = "myfile.txt";
String fileContents = "Hello World";
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream fos = new FileOutputStream(file);
fos.write(fileContents.getBytes());
fos.close();
}
打开文件
内部存储
1. 读取文件
java
String filename = "myfile";
FileInputStream fis = openFileInput(filename);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
String fileContents = sb.toString();
fis.close();
外部存储
1. 读取文件
java
String filename = "myfile.txt";
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
String fileContents = sb.toString();
fis.close();
}
检查和请求存储权限 (Android 6.0+)
对于Android 6.0及以后版本,需要动态请求权限:
java
private static final int REQUEST_CODE = 1;
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
if (ContextCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted
} else {
// Permission denied
}
}
}
请确保你在处理实际项目时适当地处理文件流的关闭,以及捕获并处理可能的异常。
查看详情
查看详情