你是不是也在想——“鸿蒙这么火,我能不能学会?”
答案是:当然可以!
这个专栏专为零基础小白设计,不需要编程基础,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。
不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,就能在这里搞懂鸿蒙开发,并做出属于自己的App!
📌 关注本专栏《零基础学鸿蒙开发》,一起变强!
每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是小白酷爱学习,我们一起上路 🚀

概述:文件存储和管理的需求

在应用开发中,文件存储和管理是必不可少的功能。许多应用需要操作本地文件系统,如读取配置文件、保存用户数据、管理日志文件、存储下载内容等。鸿蒙操作系统通过提供 Storage API,让开发者能够高效地访问和管理设备上的文件和存储空间。

鸿蒙的 Storage API 提供了对文件系统的全面访问,支持文件的读取、写入、删除以及目录的管理。本文将介绍如何在鸿蒙应用中使用 Storage API 来进行文件管理,帮助开发者更好地处理应用中的文件存储需求。

访问文件系统:读取和写入文件

在鸿蒙系统中,我们可以通过 Storage API 来读取和写入文件。鸿蒙的文件操作类似于其他操作系统,提供了简单的接口来管理文件。

步骤 1:获取文件系统访问权限

在访问文件系统之前,应用需要声明相应的权限。在 config.json 文件中添加文件存储权限:

{
  "module": {
    "name": "FileManagementModule",
    "permissions": [
      {
        "name": "ohos.permission.READ_EXTERNAL_STORAGE",
        "reason": "The app needs permission to read from external storage."
      },
      {
        "name": "ohos.permission.WRITE_EXTERNAL_STORAGE",
        "reason": "The app needs permission to write to external storage."
      }
    ]
  }
}

确保您的应用请求了对外部存储的读写权限,以便能够访问设备上的文件。

步骤 2:读取文件内容

通过 File 类可以读取存储中的文件。以下示例展示了如何读取文件内容:

import ohos.app.Context;
import ohos.storage.file.FileDescriptor;
import ohos.storage.file.Storage;
import ohos.storage.file.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileManager {
    private Context context;

    public FileManager(Context context) {
        this.context = context;
    }

    // 读取文件内容
    public String readFile(String filePath) {
        String fileContent = "";
        try {
            // 获取文件实例
            Storage storage = context.getStorage();
            File file = storage.getFile(filePath);
            
            if (file.exists()) {
                FileDescriptor fileDescriptor = file.openFileForReading();
                byte[] fileBytes = new byte[(int) file.length()];
                fileDescriptor.read(fileBytes);
                fileContent = new String(fileBytes, StandardCharsets.UTF_8); // 将字节转换为字符串
            } else {
                System.out.println("File does not exist.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileContent;
    }
}

在上述代码中,我们通过 getFile() 方法获取文件实例,使用 FileDescriptor 进行读取操作。如果文件存在,我们读取文件内容并返回字符串。

步骤 3:写入文件内容

文件写入操作同样是通过 File 类来实现,以下代码演示了如何将数据写入文件:

public void writeFile(String filePath, String data) {
    try {
        // 获取文件实例
        Storage storage = context.getStorage();
        File file = storage.getFile(filePath);
        
        // 如果文件不存在,创建文件
        if (!file.exists()) {
            file.create();
        }

        // 写入文件内容
        FileDescriptor fileDescriptor = file.openFileForWriting();
        fileDescriptor.write(data.getBytes(StandardCharsets.UTF_8));
        System.out.println("Data written to file.");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在这段代码中,我们首先检查文件是否存在,如果文件不存在,则创建文件。然后通过 openFileForWriting() 方法打开文件并将数据写入文件。

管理存储空间:管理文件和目录

鸿蒙的 Storage API 还提供了强大的目录和存储管理功能,允许开发者管理文件和目录的创建、删除等操作。

步骤 1:创建目录

要在设备中创建目录,可以使用 File 类来创建目录。以下是创建目录的代码示例:

public void createDirectory(String directoryPath) {
    try {
        Storage storage = context.getStorage();
        File directory = storage.getFile(directoryPath);

        if (!directory.exists()) {
            directory.createDirectory(); // 创建目录
            System.out.println("Directory created at: " + directoryPath);
        } else {
            System.out.println("Directory already exists.");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

步骤 2:删除文件或目录

通过 File 类,可以删除文件或目录。需要注意的是,删除目录时,目录必须为空,否则会抛出异常。

public void deleteFile(String filePath) {
    try {
        Storage storage = context.getStorage();
        File file = storage.getFile(filePath);

        if (file.exists()) {
            file.delete(); // 删除文件
            System.out.println("File deleted: " + filePath);
        } else {
            System.out.println("File does not exist.");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这段代码通过 delete() 方法删除文件。如果文件或目录存在,它会将其删除。

步骤 3:列出目录中的文件

有时我们需要查看一个目录中的所有文件。可以使用 File.listFiles() 方法列出目录中的文件。

import ohos.storage.file.File;

public void listFilesInDirectory(String directoryPath) {
    try {
        Storage storage = context.getStorage();
        File directory = storage.getFile(directoryPath);

        if (directory.exists() && directory.isDirectory()) {
            File[] files = directory.listFiles();
            for (File file : files) {
                System.out.println("File: " + file.getName());
            }
        } else {
            System.out.println("The directory does not exist or is not a directory.");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在这个例子中,我们通过 listFiles() 获取目录下的所有文件,并遍历打印文件名。

代码示例:使用 Storage API 进行文件存储管理

以下是一个完整的代码示例,演示如何使用 Storage API 来进行文件和目录的读取、写入、删除等操作。

import ohos.app.Context;
import ohos.storage.file.File;
import ohos.storage.file.FileDescriptor;
import ohos.storage.file.Storage;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileManager {
    private Context context;

    public FileManager(Context context) {
        this.context = context;
    }

    // 创建文件夹
    public void createDirectory(String directoryPath) {
        try {
            Storage storage = context.getStorage();
            File directory = storage.getFile(directoryPath);
            if (!directory.exists()) {
                directory.createDirectory();
                System.out.println("Directory created: " + directoryPath);
            } else {
                System.out.println("Directory already exists.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 写入文件
    public void writeFile(String filePath, String data) {
        try {
            Storage storage = context.getStorage();
            File file = storage.getFile(filePath);
            if (!file.exists()) {
                file.create();
            }
            FileDescriptor fileDescriptor = file.openFileForWriting();
            fileDescriptor.write(data.getBytes(StandardCharsets.UTF_8));
            System.out.println("Data written to file: " + filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 读取文件
    public String readFile(String filePath) {
        String content = "";
        try {
            Storage storage = context.getStorage();
            File file = storage.getFile(filePath);
            if (file.exists()) {
                FileDescriptor fileDescriptor = file.openFileForReading();
                byte[] data = new byte[(int) file.length()];
                fileDescriptor.read(data);
                content = new String(data, StandardCharsets.UTF_8);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content;
    }

    // 删除文件
    public void deleteFile(String filePath) {
        try {
            Storage storage = context.getStorage();
            File file = storage.getFile(filePath);
            if (file.exists()) {
                file.delete();
                System.out.println("File deleted: " + filePath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

小结

鸿蒙系统的 Storage API 提供了全面的文件管理功能,帮助开发者高效地操作设备上的文件和存储空间。通过 Storage API,开发者可以轻松地读取、写入、删除文件和目录,管理存储空间。无论是处理用户生成的文件,还是保存应用的数据,Storage API 都能为应用提供强大的支持。在实际开发中,结合用户需求和文件存储策略,使用这些 API 可以帮助您实现更加高效和灵活的文件管理功能。

❤️ 如果本文帮到了你…

  • 请点个赞,让我知道你还在坚持阅读技术长文!
  • 请收藏本文,因为你以后一定还会用上!
  • 如果你在学习过程中遇到bug,请留言,我帮你踩坑!
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐