PHP 文件操作处理类,处理 JSON 文件
PHP 文件操作处理类,处理 JSON 文件
日常开发里,处理文件是常有的事,特别是 JSON 格式的文件,不管是存配置还是数据都很常见。最近整理了一个 FileHandler 类,封装了创建、读取、写入这些基础操作,用着还挺顺手,记录下来方便以后查看。
类的代码
<?php
/**
* 文件操作处理类
* 封装文件的创建、读取、写入等基础操作,操作结果返回布尔值
*/
class FileHandler
{
/**
* 文件路径
* @var string
*/
private $filePath;
/**
* 构造函数
* @param string $filePath 文件路径
*/
public function __construct($filePath)
{
$this->filePath = $filePath;
}
/**
* 检查文件是否存在,不存在则创建
* @return bool 操作结果(成功返回true,失败返回false)
*/
public function createIfNotExists()
{
if (file_exists($this->filePath)) {
return true;
}
// 创建目录(如果需要)
$dir = dirname($this->filePath);
if (!is_dir($dir) && !mkdir($dir, 0777, true)) {
return false;
}
// 创建文件并写入空对象
return file_put_contents($this->filePath, '{}') !== false;
}
/**
* 读取文件内容并解析为数组
* @return array 解析后的数组(失败返回空数组)
*/
public function readJsonData()
{
if (!file_exists($this->filePath)) {
return [];
}
$content = file_get_contents($this->filePath);
if ($content === false) {
return [];
}
$data = json_decode($content, true);
return (json_last_error() === JSON_ERROR_NONE) ? ($data ?: []) : [];
}
/**
* 将数组数据写入文件(JSON格式)
* @param array $data 要写入的数据
* @return bool 操作结果
*/
public function writeJsonData($data)
{
$jsonContent = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
if ($jsonContent === false) {
return false;
}
return file_put_contents($this->filePath, $jsonContent) !== false;
}
/**
* 检查目录是否存在,不存在则创建(静态方法)
* @param string $dirPath 目录路径
* @return bool 操作结果
*/
public static function createDirIfNotExists($dirPath)
{
if (is_dir($dirPath)) {
return true;
}
return mkdir($dirPath, 0755, true);
}
}
主要功能说明
- 初始化文件路径:通过构造函数传入文件路径,后续操作都基于这个路径。
- 创建文件(含目录):createIfNotExists 方法会检查文件是否存在,不存在的话会先创建目录(支持多级),再创建文件并写入空的 JSON 对象。
- 读取 JSON 数据:readJsonData 方法读取文件内容,解析成数组,处理了文件不存在、读取失败、JSON 解析错误等情况,失败时返回空数组。
- 写入 JSON 数据:writeJsonData 方法把数组转成 JSON 字符串(带格式化和中文不转义),然后写入文件。
- 创建目录:静态方法 createDirIfNotExists 用于检查目录是否存在,不存在则创建,方便单独使用。
简单用法示例
// 创建文件
$fileHandler = new FileHandler('./data/user.json');
$fileHandler->createIfNotExists();
// 写入数据
$data = ['id' => 1, 'name' => '测试'];
$fileHandler->writeJsonData($data);
// 读取数据
$readData = $fileHandler->readJsonData();
print_r($readData);
// 创建目录
FileHandler::createDirIfNotExists('./uploads');
这个类比较基础,应付一般的 JSON 文件操作足够了,以后有其他需求再扩展就行。