1. 创建一个Android项目,在布局中设置2个Button(一个“保存”按钮,一个“读取”按钮),点击“保存”按钮时,将你的班级、学号、姓名等信息保存到SD卡中。文件名是你的名字的首拼,扩展名是"txt";点击“读取”按钮时将前面保存的文件内容读出。注意“权限”配置和如何查看文件。参考教材P86-87页。完整代码
时间: 2023-06-20 07:09:57 浏览: 93
以下是实现上述功能的完整代码:
1. 在 AndroidManifest.xml 文件中添加权限:
```
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
2. 在 activity_main.xml 布局文件中添加两个按钮:
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/save_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存" />
<Button
android:id="@+id/load_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="读取" />
</LinearLayout>
```
3. 在 MainActivity.java 中添加以下代码:
```
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
private static final String TAG = "MainActivity";
private static final String FILE_NAME = "myInfo.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查是否有写入SD卡的权限,如果没有则请求权限
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
findViewById(R.id.save_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveInfo();
}
});
findViewById(R.id.load_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadInfo();
}
});
}
// 保存信息到SD卡中
private void saveInfo() {
String name = "张三";
String studentNo = "123456";
String className = "软件工程";
FileOutputStream fos = null;
try {
// 创建一个以姓名首字母为文件名的txt文件
String fileName = name.substring(0, 1) + ".txt";
File file = new File(Environment.getExternalStorageDirectory(), fileName);
fos = new FileOutputStream(file);
fos.write(("姓名:" + name + "\n").getBytes());
fos.write(("学号:" + studentNo + "\n").getBytes());
fos.write(("班级:" + className + "\n").getBytes());
Toast.makeText(MainActivity.this, "保存成功!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e(TAG, "保存文件失败!", e);
Toast.makeText(MainActivity.this, "保存失败!", Toast.LENGTH_SHORT).show();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (Exception e) {
Log.e(TAG, "关闭文件流失败!", e);
}
}
}
// 从SD卡中读取信息并显示
private void loadInfo() {
FileInputStream fis = null;
BufferedReader reader = null;
try {
// 创建一个以姓名首字母为文件名的txt文件
String name = "张三";
String fileName = name.substring(0, 1) + ".txt";
File file = new File(Environment.getExternalStorageDirectory(), fileName);
fis = new FileInputStream(file);
reader = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
Toast.makeText(MainActivity.this, sb.toString(), Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e(TAG, "读取文件失败!", e);
Toast.makeText(MainActivity.this, "读取失败!", Toast.LENGTH_SHORT).show();
} finally {
try {
if (fis != null) {
fis.close();
}
if (reader != null) {
reader.close();
}
} catch (Exception e) {
Log.e(TAG, "关闭文件流失败!", e);
}
}
}
// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
// 如果请求被取消,数组为空
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予
Toast.makeText(this, "权限已授予!", Toast.LENGTH_SHORT).show();
} else {
// 权限被拒绝
Toast.makeText(this, "权限被拒绝,无法保存文件!", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
}
```
在这段代码中,我们实现了两个方法:
- `saveInfo()`:将姓名、学号和班级信息保存到以姓名首字母为文件名的txt文件中。
- `loadInfo()`:从以姓名首字母为文件名的txt文件中读取信息并显示。
同时,我们还添加了一个权限请求的方法 `onRequestPermissionsResult()`,用于处理写入SD卡的权限请求结果。
阅读全文