A opção B é a solução preferida por razões de desempenho e portabilidade (veja abaixo), e eu provavelmente leria todo o conteúdo do arquivo de uma só vez
String content = new Scanner (novo arquivo (“nome do arquivo”)). useDelimiter (“\ Z”). next ();
(desta resposta do StackOverflow )
Você deve manipular os erros de E / S causados pelo arquivo que não está presente e lê-los quando o arquivo é zero bytes (isso pode ocorrer quando hwmon trunca o arquivo antes de gravar o novo valor no arquivo, embora seja muito breve tempo que isso pode acontecer).
A opção A acaba criando dois subprocessos - primeiro cria um shell e passa a linha de comando para o processo, que inicia o que você espera que seja o comando cat que você está esperando. Se o processo que está executando seu programa tiver uma variável de ambiente de caminho estranha, ele poderá falhar ao executar o comando cat ou executar algo que você não está esperando. Isso pode ser mitigado usando o caminho completo (geralmente / bin / cat), isso ainda é dependente do sistema.
No geral, é quase sempre melhor não gerar processos externos, a menos que você não tenha outra escolha.