web-dev-qa-db-fra.com

Comment lire un fichier texte à partir de ressources Kotlin?

Je veux écrire un test Spek à Kotlin. Le test doit lire un fichier HTML à partir du dossier src/test/resources. Comment faire?

class MySpec : Spek({

    describe("blah blah") {

        given("blah blah") {

            var fileContent : String = ""

            beforeEachTest {
                // How to read the file file.html in src/test/resources/html
                fileContent = ...  
            }

            it("should blah blah") {
                ...
            }
        }
    }
})
59
Olaf
val fileContent = MySpec::class.Java.getResource("/html/file.html").readText()
87
JB Nizet

une autre solution légèrement différente:

@Test
fun basicTest() {
    "/html/file.html".asResource {
        // test on `it` here...
        println(it)
    }

}

fun String.asResource(work: (String) -> Unit) {
    val content = this.javaClass::class.Java.getResource(this).readText()
    work(content)
}
22
jhodges

Aucune idée de la raison pour laquelle c'est si difficile, mais le moyen le plus simple que j'ai trouvé (sans avoir à faire référence à une classe particulière) est:

fun getResourceAsText(path: String): String {
    return object {}.javaClass.getResource(path).readText()
}

Et puis en passant une URL absolue, par exemple.

val html = getResourceAsText("/www/index.html")
12
Russell Briggs

Une solution légèrement différente:

class MySpec : Spek({
    describe("blah blah") {
        given("blah blah") {

            var fileContent = ""

            beforeEachTest {
                html = this.javaClass.getResource("/html/file.html").readText()
            }

            it("should blah blah") {
                ...
            }
        }
    }
})
11
Olaf

Kotlin + voie de printemps:

@Autowired
private lateinit var resourceLoader: ResourceLoader

fun load() {
    val html = resourceLoader.getResource("classpath:html/file.html").file
        .readText(charset = Charsets.UTF_8)
}
4
naXa

Utilisation de la bibliothèque Google Guava classe de ressources :

import com.google.common.io.Resources;

val fileContent: String = Resources.getResource("/html/file.html").readText()
2
Lu55
val fileContent = javaClass.getResource("/html/file.html").readText()
2
jivimberg

Vous pourriez trouver la classe File utile:

import Java.io.File

fun main(args: Array<String>) {
  val content = File("src/main/resources/input.txt").readText()
  print(content)
} 
2
Krzysztof Ziomek