direnvを使うとディレクトリに応じて環境変数の切り替えができるので、
JAVA_HOMEを切り替えで、利用するJavaのVersionを変更することが出来ます。

direnv/direnv | GitHub
https://github.com/direnv/direnv

参考: direnv で java を切り替える | Qiita
https://qiita.com/tonluqclml/items/8252e263f006d5d2057a

ところで、
ディレクトリ配下で利用するJavaのVersionはIntelliJ IDEAでも指定しており、
direnvでも指定すると不整合がおきて面倒になる可能性があります。
そこで、IntelliJ IDEAで設定したVersionに切り替えられないかを考えてみました。

IntelliJ IDEAで指定したJavaのVersionは.idea/misc.xmlに記載されています。

.idea/misc.xmlの抜粋

  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" />

このファイルからVersion情報を取得して環境変数を設定する処理を、
次のように~/.direnvrcに作成します。
(UbuntuLinuxとmacos用です)

~/.direnvrc

# Usage: use dotideajava
# Loads Java version defined in .idea/misc.xml.
#
# Add following command to your project .envrc.
#   use_dotideajava
#
use_dotideajava() {
  if [ -f .idea/misc.xml ]; then
    java_version=$(cat .idea/misc.xml | grep JavaSDK | sed -e "s/.*project-jdk-name=\"\([0-9.]*\).*/\1/")
    if [ "$java_version" = "" ]; then
      return
    fi
    if [ -d /usr/lib/jvm ]; then
      jvm_name=$(ls /usr/lib/jvm/ | grep $(cat .idea/misc.xml | grep JavaSDK | sed -e "s/.*project-jdk-name=\"\([0-9.]*\).*/\1/") | tail -1)
      if [ ! "$jvm_name" = "" ]; then
        export JAVA_HOME=/usr/lib/jvm/$jvm_name
        export PATH=$JAVA_HOME/bin:$PATH
      fi
    elif [ "$(uname)" == "Darwin" ]; then
      export JAVA_HOME=`/usr/libexec/java_home -v $java_version`
    fi
  fi
}

設定したいディレクトリに移動して、
direnv edit ..envrcを次のように編集すると、
IntelliJ IDEAの設定に応じてJAVA_HOMEが切り替わります。

.envrc

use_dotideajava

但し、
IntelliJ IDEAのSDKの設定で、
project-jdk-nameをデフォルトの名称から変更していると、
この方法では切り替えできません。

以上。