Android存储读取文件实战:CDsaveFile项目教程

2 下载量 165 浏览量 更新于2024-08-29 收藏 185KB PDF 举报
本示例将介绍如何在Android平台上实现文件的存储与读取操作,主要涉及使用Android Studio创建项目,设计布局文件以及编写Java代码来处理文件操作。 首先,创建一个名为`CDsaveFile`的Android项目。这通常通过启动Android Studio,选择“New Project”模板,然后设置项目名称、包名以及选择最小SDK版本来完成。确保选择合适的Android API级别作为目标版本,以便支持广泛的设备。 接下来,设计`activity_main.xml`布局文件。这是一个用于用户界面的XML文件,包含了一个垂直方向的`LinearLayout`,它又包含了一个水平方向的子`LinearLayout`。在这个子布局中,我们放置了一个`TextView`显示提示信息,一个`EditText`用于用户输入文件名,以及一个`requestFocus`标签确保焦点落在`EditText`上,让用户可以立即开始输入。 布局文件的代码片段如下: ```xml <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:orientation="vertical" tools:context="hhh.exercise.cdsavefile.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/textView_inputFileName" android:textColor="#00ff00" android:textSize="26sp" /> <EditText android:id="@+id/editView_fileName" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:hint="@string/editView_fileName" android:maxLines="1" android:textColor="#ff0000" android:textSize="26sp" /> <requestFocus /> </LinearLayout> <!-- 其他布局组件可以在此添加 --> </LinearLayout> ``` 在实际应用中,你还需要添加按钮以触发文件的保存和读取操作。例如,可以添加两个`Button`,一个用于保存文件,另一个用于读取文件。为这些按钮添加`OnClickListener`,在监听器中实现文件操作的逻辑。 对于文件存储,Android提供了多种存储方式,包括内部存储(Internal Storage)、外部存储(External Storage,如SD卡)以及SQLite数据库。在本例中,我们将关注内部存储和外部存储。 1. 内部存储:内部存储是私有的,只有应用本身能访问。使用`openFileOutput()`方法,传入文件名和操作模式(例如`Context.MODE_PRIVATE`),可以创建或打开一个文件。存储文件后,使用`openFileInput()`读取文件内容。 2. 外部存储:外部存储对所有应用开放,但需要权限(如`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`)。使用`Environment.getExternalStorageDirectory()`获取SD卡根目录,然后创建所需路径下的文件。使用`FileOutputStream`和`FileInputStream`进行写入和读取操作。 以下是一个简单的文件存储和读取的Java代码示例: ```java public class MainActivity extends AppCompatActivity { private static final String FILE_NAME = "myfile.txt"; private EditText fileNameEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fileNameEditText = findViewById(R.id.editView_fileName); } public void saveToFile(View view) { String content = "这是要保存的内容"; // 实际内容来自用户输入或其他逻辑 try { FileOutputStream fos = openFileOutput(fileNameEditText.getText().toString(), Context.MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); Toast.makeText(this, "文件保存成功", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(this, "保存失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } public void readFile(View view) { try { FileInputStream fis = openFileInput(fileNameEditText.getText().toString()); byte[] buffer = new byte[1024]; int length; StringBuilder contentBuilder = new StringBuilder(); while ((length = fis.read(buffer)) > 0) { contentBuilder.append(new String(buffer, 0, length)); } fis.close(); Toast.makeText(this, "文件内容:" + contentBuilder.toString(), Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(this, "读取失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } } ``` 以上代码中,`saveToFile()`方法将文本内容保存到内部存储,而`readFile()`方法则读取该文件内容并显示。注意,为了保证用户体验,你应该处理可能的异常情况,例如文件不存在或无法访问。 在实际应用中,根据需求可以选择合适的方式存储数据,例如,敏感信息应存储在内部存储,大文件或需要共享的数据可考虑外部存储。同时,确保在AndroidManifest.xml中申请了相应的权限,以允许应用进行文件操作。