目录
一,介绍
在本教程中我将检测在ESP32 使用SPIFFS 文件系统从文件中读取内容,有关于如何编写文件的详细教程,请看上一篇的教程。
在下面的的代码中,我们将在读取之前编写该文件。但如果你已经按照上一个教程进行操作的话,你可以跳过这一步。因为该文件已经保留在SPIFFS 文件系统中了。
二,硬件
- ESP32开发板
三,电路图
无
四,代码设计
我们通过包含SPIFFS.h库来启动代码,因此我们可以访问从文件写入和读取所需的方法。请记住,在上一个教程中,通过包含此库,我们将可以访问SPIFFS extern变量,该变量将是用于与文件系统交互的变量。
#include "SPIFFS.h"
继续使用Arduino设置功能,我们首先初始化一个串行连接,以便稍后打印从文件中读取的内容。
Serial.begin(115200);
现在我们将通过调用SPIFFS extern变量上的begin方法来挂载文件系统,将值true传递给输入,这样可以确保在安装失败的情况下格式化文件系统。
由于对文件系统安装成功的情况下调用begin方法返回true,否则返回false,我们也会进行错误检查以确认所有内容都已正确初始化。
if(!SPIFFS.begin(true)){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
现在我们将负责编写一个名为“ /test.txt ” 的文件,相应之前我们在上一个教程中介绍过的内容。如果您已按照上一个教程并已创建该文件,则可以跳过此部分代码。
因此,我们将首先打开文件进行编写,在SPIFFS对象上调用open方法。作为第一个输入,我们传递文件的名称,然后我们传递常量FILE_WRITE,因此文件以书写模式打开。
此方法调用将返回类File的对象,我们将使用它来编写内容。
如果文件成功打开,我们将在File对象上调用print方法,将带有要写入内容的字符串作为输入传递。
我们最后会调用File对象上的close方法,以便关闭文件。
File file = SPIFFS.open("/test.txt", FILE_WRITE);
if(!file){
Serial.println("There was an error opening the file for writing");
return;
}
if(file.print("TEST")){
Serial.println("File was written");;
} else {
Serial.println("File write failed");
}
file.close();
现在我们已经创建了文件并编写了一些内容,我们将打开它来阅读其内容。
为了打开文件进行读取,我们再次调用SPIFFS extern变量上的open方法,将文件名称作为输入传递(记住它是“/test.txt”)。从此头文件中可以看出,文件的默认打开模式是读取,因此我们不需要传递指示打开模式的第二个参数。
同样,这将返回类File的对象。请记住,在上一个教程中,File类会覆盖Boolean C ++运算符,因此我们可以使用if条件来检查文件是否已成功打开。
File file2 = SPIFFS.open("/test.txt");
if(!file2){
Serial.println("Failed to open file for reading");
return;
}
我们现在将循环读取文件中的内容。我们将调用File对象上的available方法来检查剩下要读取的字节数,并使用返回的值作为读取循环的停止条件。
要从文件中读取一个字节,我们调用File对象的read方法,并将结果打印到串行端口。
while(file2.available()){
Serial.write(file2.read());
}
读完所有字节后,我们通过调用File对象上的close方法来关闭文件。
file2.close();
最终的源代码如下所示。
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
if(!SPIFFS.begin(true)){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
File file = SPIFFS.open("/test.txt", FILE_WRITE);
if(!file){
Serial.println("There was an error opening the file for writing");
return;
}
if(file.print("TEST")){
Serial.println("File was written");;
} else {
Serial.println("File write failed");
}
file.close();
File file2 = SPIFFS.open("/test.txt");
if(!file2){
Serial.println("Failed to open file for reading");
return;
}
Serial.println("File Content:");
while(file2.available()){
Serial.write(file2.read());
}
file2.close();
}
void loop() {}
五,测试代码
要测试代码,请将其编译并上传到ESP32。完成该过程后,打开Arduino IDE串行监视器。您应该获得类似于图1的输出,该输出显示正在打印到监视器的文件的内容。