Ola! Pelo código ele deveria sim criar o arquivo filmes.json ao final da execução, logo depois que você digita "sair". Se o arquivo não está aparecendo e também não há erro, alguns pontos podem estar acontecendo:
Onde o arquivo é salvo
O new FileWriter("filmes.json") cria o arquivo no diretório raiz de onde você está executando a aplicação.
Se você está rodando pelo IntelliJ/Eclipse, normalmente o arquivo vai parar na pasta raiz do projeto, e não dentro de src/.
Faça um System.out.println(new File(".").getAbsolutePath()); logo antes do FileWriter para confirmar o caminho real.
O loop precisa ser finalizado
O arquivo só é escrito depois que o loop while termina (quando você digita sair).
Se você está apenas digitando filmes e fechando a execução no botão “stop” do IDE, o trecho que grava o JSON nunca chega a ser executado.
Possível problema de permissão
Se você estiver executando em um ambiente com restrições (alguns sandboxes, WSL, ou containers), pode ser que o programa não tenha permissão para criar arquivos. Mas nesse caso o FileWriter normalmente lançaria IOException.
Ve se a lista não está vazia
Mesmo que a lista titulos esteja vazia, o arquivo ainda deveria ser criado (só que contendo []).
Se não existir nenhum arquivo, é mais provável ser a questão do diretório de execução ou do encerramento incorreto do programa.
Sugestão para depurar:
System.out.println("Gravando arquivo no diretório: " + new File(".").getAbsolutePath());
FileWriter escrita = new FileWriter("filmes.json");
escrita.write(gson.toJson(titulos));
escrita.close();
System.out.println("Arquivo filmes.json criado com sucesso!");