When using a pipeline, bash runs the commands in subshellssubshells¹. Therefore, the array is populated, but in a subshell, so the parent shell has no access to it. You also likely want the -t option so as not to store that line delimiters in the array members as they are not part of the file names.
Use process substitution:
readarray -t FILES < <(find .) Note that it doesn't work for files with newlines in their namespaths. If that couldUnless you can guarantee if won't be the case, you need a more elaborate syntaxyou'd want to use NUL delimited records instead of newline delimited ones:
readarray -dtd '' < <(find . -print0) (the -d option was added in bash 4.4)
¹ except for the last pipe component when using the lastpipe option, but that's only for non-interactive invocations of bash.