В Scala существует несколько методов получения файла по URL-адресу и сохранения его содержимого в виде строки. В этой статье вы познакомитесь с различными подходами, предоставив разговорные объяснения и примеры кода, которые помогут вам понять каждый метод. Давайте погрузимся!
Метод 1: использование java.net.URL
Самый простой способ получить файл по URL-адресу — использовать класс java.net.URLв Scala. Вот пример:
import java.net.URL
import scala.io.Source
def getFileContent(url: String): String = {
val fileUrl = new URL(url)
val source = Source.fromURL(fileUrl)
val content = source.mkString
source.close()
content
}
Метод 2: использование HttpClient
Другой вариант — использовать библиотеку HttpClient, которая обеспечивает большую гибкость и контроль над HTTP-запросами. Вот пример:
import java.net.URI
import org.apache.hc.client5.http.classic.methods.HttpGet
import org.apache.hc.client5.http.impl.classic.HttpClients
def getFileContent(url: String): String = {
val httpclient = HttpClients.createDefault()
val httpGet = new HttpGet(new URI(url))
val response = httpclient.execute(httpGet)
val entity = response.getEntity
val content = EntityUtils.toString(entity)
response.close()
content
}
Метод 3: использование Akka HTTP
Для более сложных сценариев вы можете использовать библиотеку Akka HTTP, которая предоставляет мощный набор инструментов для создания приложений на основе HTTP. Вот пример:
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.stream.ActorMaterializer
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
def getFileContent(url: String): Future[String] = {
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
val responseFuture: Future[HttpResponse] = Http().singleRequest(HttpRequest(uri = url))
responseFuture.flatMap { response =>
response.entity.toStrict(5.seconds).map(_.data.utf8String)
}
}