Работа с файлами

Для работы с файлами в React Native используется сторонняя библиотека react-native-fs, так как стандартный JavaScript не предоставляет прямого доступа к файловой системе устройства. Эта библиотека даёт возможность читать, записывать, копировать, удалять файлы и управлять директориями на уровне нативной файловой системы iOS и Android.

Установка:

npm install react-native-fs

После установки (и, при необходимости, линковки — хотя в новых версиях React Native это обычно не требуется) можно использовать глобальный объект RNFS.

Основные возможности:

  • Чтение и запись текстовых и бинарных файлов.
  • Работа с предопределёнными путями: DocumentDirectoryPath, CachesDirectoryPath, MainBundlePath и др.
  • Скачивание файлов из сети напрямую на диск.
  • Проверка существования файла, получение его размера и метаданных.

Пример сохранения изображения по URI в кэш:

import RNFS from 'react-native-fs';

const saveImageToCache = async (uri: string, filename: string): Promise<string> => {
  const filePath = `${RNFS.CachesDirectoryPath}/${filename}`;
  
  // Копируем файл из временного URI (например, после выбора через ImagePicker)
  await RNFS.copyFile(uri, filePath);
  
  return filePath; // возвращаем локальный путь для последующего использования
};

Пример чтения текстового файла:

const readFileContent = async (filename: string): Promise<string | null> => {
  const filePath = `${RNFS.DocumentDirectoryPath}/${filename}`;
  try {
    const content = await RNFS.readFile(filePath, 'utf8');
    return content;
  } catch (error) {
    console.error('Failed to read file', error);
    return null;
  }
};

Важно понимать, что разные директории имеют разное поведение:

  • CachesDirectoryPath — данные могут быть удалены системой при нехватке места (подходит для временных файлов, кэша).
  • DocumentDirectoryPath — данные сохраняются между запусками и резервным копированием (подходит для пользовательских документов).

Библиотека react-native-fs работает с нативными путями, поэтому нельзя использовать её для прямого отображения файлов в компонентах без преобразования URI (например, в Image нужно использовать file:// + путь).

Этот инструмент особенно полезен для офлайн-кэширования медиа, экспорта данных в CSV/PDF или сохранения аватаров пользователя на устройстве.