Android基础教程数据存储之文件存储

针对 Android 基础教程中的数据存储之文件存储一章,我会给出完整的攻略,以及至少两条示例说明。

一、数据存储之文件存储

Android 系统提供了多种数据存储技术,其中文件存储技术是比较常用的一种。文件存储主要用于存储一些非结构化的数据,如图片、音频和视频等。文件存储可以分为内部存储和外部存储两种,其中内部存储又分为应用程序私有存储和应用程序公有存储两种形式。

本文将以应用程序私有存储的方式,实现文件的读取和写入。

1.文件存储方法

应用程序私有存储主要通过上下文对象Context提供的openFileInput()openFileOutput()方法实现,其中openFileInput()用于读取存储在Android文件系统中的文件,而openFileOutput()方法用于创建写入的文件,并且可以选择是否追加内容。

2.读取文件

刚才提到了openFileInput()方法可以用来读取已经存储的文件,下面给出具体的代码示例:

public String read() {
    FileInputStream in;
    BufferedReader reader;
    StringBuilder content = new StringBuilder();
    try {
        in = openFileInput("data");
        reader = new BufferedReader(new InputStreamReader(in));
        String line;
        // 使用reader对象逐行读取文件内容
        while ((line = reader.readLine()) != null) {
            content.append(line);
        }
        reader.close();
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return content.toString();
}

上述代码中,首先通过openFileInput()方法获取FileInputStream对象,然后再通过BufferedReader逐行读取文件内容,读取完毕后,关闭文件输入流和BufferedReader对象,并将读取的数据以字符串的形式返回给调用者。

需要注意的是,openFileInput()返回的是字节流的形式,因此需要通过InputStreamReader将其转化为字符流,并且由于BufferedReader可以逐行读取内容,因此它也要参与到字符流转化中。

3.写入文件

应用程序私有存储还允许将文件写入到Android文件系统之中,下面给出具体的代码示例:

public void save(String inputText) {
    FileOutputStream out;
    BufferedWriter writer;
    try {
        out = openFileOutput("data", Context.MODE_PRIVATE);
        writer = new BufferedWriter(new OutputStreamWriter(out));
        // 将传入的字符串写入到文件中
        writer.write(inputText);
        writer.close();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

上述代码中,首先通过openFileOutput()方法创建一个FileOutputStream对象,然后通过BufferedWriter将要写入的内容逐行添加到这个FileOutputStream中。最后关闭文件输出流和BufferedWriter,完成写入操作。

和读取文件的过程类似,写入文件的过程也需要先将字节流转化为字符流,因此在创建BufferedWriter对象时,也要使用OutputStreamWriter将字节流转化为字符流。

二、示例说明

下面给出一个使用应用程序私有存储进行文件读写的简单示例:

首先创建一个按钮,使用该按钮执行写入操作:

<Button
    android:id="@+id/save"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Save to File" />

在对应的 Activity 中,添加如下代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private EditText edit;
    private Button btnSave, btnLoad;
    private FileService service;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = findViewById(R.id.edit);
        btnSave = findViewById(R.id.save);
        btnLoad = findViewById(R.id.load);

        btnSave.setOnClickListener(this);
        btnLoad.setOnClickListener(this);

        service = new FileService(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.save:
                final String inputText = edit.getText().toString();
                service.save(inputText);
                break;
            case R.id.load:
                String data = service.read();
                if (!TextUtils.isEmpty(data)) {
                    edit.setText(data);
                    // 将光标移到末尾
                    edit.setSelection(data.length());
                }
                break;
            default:
                break;
        }
    }
}

在上述代码中,我们创建了一个FileService类,用于封装对文件的读写操作。当用户按下“Save to File”按钮时,我们获取输入框中的内容,并调用FileService类的save()方法将该内容写入到文件中。当用户按下“Load from File”按钮时,则调用FileService类的read()方法从文件中读取保存的内容并显示到输入框中。

另外一个示例是实现将图片写入到文件系统中:

private void saveImageToExternalStorage(Bitmap finalBitmap, String dirName, String fileName) {
        String root = Environment.getExternalStorageDirectory().toString();
        //创建目录
        File dir = new File(root + "/" + dirName);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        File file = new File(dir, fileName);
        if (file.exists()) {
            file.delete();
        }
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

上述代码中,我们使用了Environment.getExternalStorageDirectory()获取了外部存储的文件根目录。然后通过创建File对象的形式,创建要存储的路径和文件,并将这个File对象传给FileOutputStream。最后,通过Bitmap的压缩功能将图片压缩为PNG格式并写入到外部存储中。

以上是 Android 基础教程数据存储之文件存储的完整攻略和两个示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android基础教程数据存储之文件存储 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • xml文件的结构解读第1/2页

    XML文件的结构解读第1/2页 1. 什么是XML? XML全称为可扩展标记语言(Extensible Markup Language),是一种被设计用来传输和存储数据的标记语言。XML的出现使得不同应用之间的数据交换变得更加容易。因为XML是与平台无关的格式,所以不受操作系统、软件或设备的限制,这也是XML广受欢迎的原因。 2. XML的结构 XML文件由…

    html 2023年5月30日
    00
  • jsp fckeditor 上传中文图片乱码问题的解决方法

    针对“jsp fckeditor 上传中文图片乱码问题的解决方法”这个问题,以下是详细攻略: 问题描述 在使用JSP集成FCKeditor富文本编辑器时,上传中文图片时会出现乱码问题。 解决方法 FCKeditor默认是以ISO-8859-1编码方式进行上传的,所以中文图片上传时会出现乱码问题。需要进行以下两个步骤的解决。 步骤一:修改FCKeditor配置…

    html 2023年5月31日
    00
  • asp.net创建XML文件的方法小结

    接下来我将为你详细讲解如何使用ASP.NET创建XML文件的方法,其中将包含两个示例。 1. 创建XML文件 要创建XML文件,可以使用XmlDocument类。在使用前,需要先在文件头部引入 System.Xml 的命名空间。 以下是创建XML文件的基本步骤: 创建XmlDocument对象 创建根节点XmlElement对象 创建子节点XmlElemen…

    html 2023年5月30日
    00
  • 怎么写快手个人介绍吸引人?快手涨粉个人介绍大全

    以下是“怎么写快手个人介绍吸引人?快手涨粉个人介绍大全”的完整攻略: 怎么写快手个人介绍吸引人?快手涨粉个人介绍大全 快手是一款非常流行的短视频社交应用,用户可以通过写出吸引人的个人介绍来吸引更多的粉丝。下面是一些写出吸引人的快手个人介绍的技巧,可以帮助用户涨粉。 技巧1:突出个性特点 用户可以突出自己的个性特点。用户可以在个人介绍中介绍自己的特点、爱好、经…

    html 2023年5月18日
    00
  • Xpath语法格式总结

    Xpath语法格式总结 Xpath(XML Path Language)是一门用于在XML文档中定位节点的语言,也被用于HTML文档中的Web页面抓取。下面详细讲解Xpath语法的使用格式。 基本语法 Xpath中主要有两种路径表达式:绝对路径和相对路径。 绝对路径 绝对路径由根节点开始,通过逐级指定节点的名称来描述节点的路径,以下为绝对路径的格式: /pa…

    html 2023年5月30日
    00
  • C# 对XML操作入门实例

    下面是针对“C# 对XML操作入门实例”的完整攻略,包含两条示例说明: 简介 XML(eXtensible Markup Language)是一种标记语言,用于存储和传输数据。在C#编程中,可以使用System.Xml命名空间提供的类来读取、创建、更新和删除XML文档。 示例1:读取XML文档 以下是使用C#读取XML文档的基本步骤: 导入System.Xm…

    html 2023年5月30日
    00
  • PHP截取汉字乱码问题解决方法mb_substr函数的应用

    下面是详细的“PHP截取汉字乱码问题解决方法mb_substr函数的应用”的攻略: 1. 问题背景 在使用PHP编写网页或者应用时,经常需要对字符串进行截取。但是对于包含中文字符的字符串,采用普通的截取方法会导致乱码的问题。这时可以使用PHP内置函数mb_substr()来解决这个问题。 2. mb_substr函数 mb_substr()函数是PHP中专门…

    html 2023年5月31日
    00
  • 抖音怎么养号?做好这三步就能快速实现抖音养号

    以下是“抖音怎么养号?做好这三步就能快速实现抖音养号”的完整攻略: 抖音怎么养号?做好这三步就能快速实现抖音养号 抖音是一款非常流行的短视频应用程序,用户可以在软件中发布自己的短视频,与其他用户互动等。下面是抖音养号的三个步骤。 步骤1:优化个人资料 在进行抖音养号时,用户需要优化自己的个人资料,以便更好地吸引其他用户的关注。用户可以上传自己的头像、填写自己…

    html 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部