Lendo de um arquivo no Kotlin

Lendo de um arquivo no Kotlin

1. Visão geral

Neste tutorial rápido, aprenderemos sobre as várias maneiras de ler um arquivo em Kotlin.

Cobriremos casos de uso de leitura de todo o arquivo comoString,, bem como leitura em uma lista de linhas individuais. Também obtê-lo de um caminho absoluto completo ou de um recurso do projeto.

2. Lendo um arquivo

Vamos primeiro criar um arquivo de entrada que será lido por Kotlin. Criamos um arquivo chamadoKotlin.ine colocamos em um diretório que pode ser acessado por nosso código.

O conteúdo do arquivo pode ser:

Hello to Kotlin. It's:
1. Concise
2. Safe
3. Interoperable
4. Tool-friendly

Agora vamos examinar as diferentes maneiras de ler este arquivo. Devemos passar o caminho completo do arquivo criado acima como entrada para os métodos iniciais e o caminho relativo em nossos recursos nos últimos dois.

2.1. forEachLine

Reads a file line by line usando ocharset especificado (o padrão é UTF-8) e chama uma ação para cada linha:

fun readFileLineByLineUsingForEachLine(fileName: String)
  = File(fileName).forEachLine { println(it) }

2.2. useLines

Chama um determinado retorno de chamada de bloco, dando a ele uma sequência de todas as linhas em um arquivo.

Após a conclusão do processamento, o arquivo é fechado:

fun readFileAsLinesUsingUseLines(fileName: String): List
  = File(fileName).useLines { it.toList() }

2.3. bufferedReader

Retorna um novoBufferedReader para ler o conteúdo do arquivo.

Assim que tivermos umBufferedReader, podemos ler todas as linhas nele:

fun readFileAsLinesUsingBufferedReader(fileName: String): List
  = File(fileName).bufferedReader().readLines()

2.4. readLines

Lê diretamente o conteúdo do arquivo como uma lista de linhas:

fun readFileAsLinesUsingReadLines(fileName: String): List
  = File(fileName).readLines()

Este método não é recomendado para uso em arquivos grandes.

2.5. inputStream

Constrói um novoFileInputStream para o arquivo e o retorna como resultado.

Assim que tivermos o fluxo de entrada, podemos convertê-lo em bytes e, em seguida, em umString completo:

fun readFileAsTextUsingInputStream(fileName: String)
  = File(fileName).inputStream().readBytes().toString(Charsets.UTF_8)

2.6. readText

Reads the entire content of the file as a String ocharset especificado (o padrão é UTF-8):

fun readFileDirectlyAsText(fileName: String): String
  = File(fileName).readText(Charsets.UTF_8)

Este método não é recomendado para arquivos grandes e tem uma limitação interna de tamanho de arquivo de 2 GB.

2.7. getResource

Encontra um recurso com o nome fornecido e retorna um objetoURL:

fun readFileUsingGetResource(fileName: String)
  = this::class.java.getResource(fileName).readText(Charsets.UTF_8)

Se encontrar o recurso, ele retornará umURL, que pode ser processado chamando o métodoreadText conforme mostrado antes. Se não conseguir encontrar o recurso, ele retornaránull. Ao usargetResource, o passado emfileName não é um nome de arquivo absoluto, mas um nome relativo aos recursos do nosso projeto.

2.8. getResourceAsStream

Encontra um recurso com o nome fornecido e retorna uma instânciaInputStream:

fun readFileAsLinesUsingGetResourceAsStream(fileName: String)
  = this::class.java.getResourceAsStream(fileName).bufferedReader().readLines()

Se encontrar o recurso, ele retornará umInputStream, que pode ser processado como mostrado antes - por exemplo, obtendo umBufferedReader. Se não conseguir encontrar o recurso, ele retornaránull. Ao usargetResourceAsStream, o passado emfileName não é um nome de arquivo absoluto, mas um nome relativo aos recursos do nosso projeto.

3. Conclusão

Neste artigo, vimos as várias maneiras de ler um arquivo no Kotlin. Dependendo do caso de uso, podemos optar por ler o arquivo linha por linha ou totalmente como um texto. Podemos nos referir ao arquivo de maneira absoluta ou encontrá-lo entre os recursos.

O código-fonte deste artigo pode ser encontrado emGitHub repo a seguir.