要求
1、权限注册;
2、实现FileService类的readFile()和writeFile()方法;
3、在Activity中调用writeFile()方法;
4、通过DDMS中的File Explorer查找下载文件。
权限
androidManifest.xml配置文件中加入访问和写入SDCard权限:
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
FileService
import android.content.Context;
import android.os.Environment;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileService {
private final Context context;
public FileService(Context context) {
this.context = context;
}
public void writeFile(String filename, String content) throws Exception {
FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE);
//写入数据
fos.write(content.getBytes());
//关闭输出流
fos.close();
}
public void saveToSDCard(String filename, String content) throws Exception {
//SDcard路径在2.2以前是/sdcard,在2.2以上版本中是/mnt/sdcard,最好采用下面的方式灵活获取,适用于所有版本
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream fos = new FileOutputStream(file);
//写入数据
fos.write(content.getBytes());
//关闭输出流
fos.close();
}
public byte[] readFile(String filename) throws Throwable {
FileInputStream fis = context.openFileInput(filename);
byte[] buf = new byte[1024];
int len = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//读取数据
while ((len = fis.read(buf)) != -1) {
baos.write(buf, 0, len);
}
byte[] data = baos.toByteArray();
//关闭流
baos.close();
fis.close();
return data;
}
}
activity
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import cn.ccit.edu.com13412.sdcard1.service.FileService;
public class MainActivity extends Activity {
private FileService fileService;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fileService = new FileService(this);
Button button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(v -> {
//获取输入的数据
EditText filenameText = (EditText) findViewById(R.id.filename);
EditText filecontentText = (EditText) findViewById(R.id.filecontent);
String filename = filenameText.getText().toString();
String filecontent = filecontentText.getText().toString();
try {
//保存文件到内部存储
fileService.writeFile(filename, filecontent);
Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();
//保存文件到SD卡
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
fileService.saveToSDCard(filename, filecontent);
Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();
//读取文件内容
try {
byte[] data = fileService.readFile(filename);
String fileContent = new String(data);
//显示文件内容在TextView中
TextView fileContentTextView = findViewById(R.id.fileContentTextView);
fileContentTextView.setText(fileContent);
} catch (Throwable throwable) {
Log.e(TAG, throwable.toString());
Toast.makeText(MainActivity.this, R.string.failed, Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(MainActivity.this, R.string.sdcarderror, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.e(TAG, e.toString());
Toast.makeText(MainActivity.this, R.string.failed, Toast.LENGTH_LONG).show();
}
});
}
}
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/filename"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/filename"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/filecontent"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minLines="3"
android:id="@+id/filecontent"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:id="@+id/button"
/>
<TextView
android:id="@+id/fileContentTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>