Dartでファイルを取得する

概要

ファイル取得には、dart:ioパッケージを使用する。

手順

Danger

ファイル操作にはファイルへのアクセス権限要求を行う必要がある。

まずパッケージをインポートする。

import 'dart:io';

どのディレクトリからファイルを取得するか記述する。
その際、プラットフォームごとに処理を変更する場合はPlatformクラスを使用する。

Future<Directory> fetchExternalDir() async {
	Directory? dir = Directory("");
	
	if(Platform.isWindows){
      dir = Directory("path");
    }
	else if(Platform.isAndroid){
	  //Androidのダウンロードディレクトリ
      dir = Directory("/storage/emulated/0/Download/");
    }
 
	return dir;
}

そのディレクトリの中のファイルを取得する。
DirectoryクラスのlistSyncメソッドを使用する。
その際にList<FileSystemEntity>型で値が返される。

Future<List> _fetchFileFromDownloadDir() async {
	Directory dir = await _fetchExternalDir();
	List<FileSystemEntity> result = dir.listSync();
	return result;
}

ファイル名の取得にはtoString()メソッドを使用する。
この際、絶対パスが返ってくるのでトリムなどの処理は必要。

result.toString();

トリム用のクラスは以下に作成した。
Android用。

class FileStrTrimer{
  List<String> convertFileNameToNameString(List listArg){
    List<String> strList = convertFileNameToString(listArg);
    List<String> result = [];
 
    for(var i = 0; i < strList.length; i++){
      result.add(
        strList[i]
          .replaceAll("File: '/storage/emulated/0/Download/", "")
          .replaceAll("Directory: '/storage/emulated/0/Download/", "")
          .replaceAll("'", "")
      );
    }
 
    return result;
  }
 
  List<String> convertFileNameToString(List listArg){
    List<String> result = [];
 
    for(var i = 0; i < listArg.length; i++){
      if(listArg[i].toString().contains(".trashed-") || listArg[i].toString().contains("Nearby Share")) continue;
      result.add(listArg[i].toString());
    }
 
    return result;
  }
 
  List<String> convertFileNameToPathString(List listArg){
    List<String> strList = convertFileNameToString(listArg);
    List<String> result = [];
 
    for(var i = 0; i < strList.length; i++){
      result.add(
        strList[i]
          .replaceAll("File: '", "")
          .replaceAll("Directory: '", "")
          .replaceAll("'", "")
      );
    }
 
    return result;
  }
}