Как считать текстовый файл из ресурсов в Kotlin?

Я хочу записать Говорить тест в Kotlin. Тест должен считать файл HTML из src/test/resources папка. Как сделать это?

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") {
                ...
            }
        }
    }
})
62
задан 11 March 2017 в 22:45

8 ответов

val fileContent = MySpec::class.java.getResource("/html/file.html").readText()
89
ответ дан 31 October 2019 в 13:32

другое немного отличающееся решение:

@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)
}
24
ответ дан 31 October 2019 в 13:32

Никакая идея, почему это настолько твердо, но самый простой способ, которым я нашел (не имея необходимость относиться к конкретному классу):

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

И затем передающий в абсолютном URL, например,

val html = getResourceAsText("/www/index.html")
15
ответ дан 31 October 2019 в 13:32

Немного отличающееся решение:

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
ответ дан 31 October 2019 в 13:32

Kotlin + Spring путь:

@Autowired
private lateinit var resourceLoader: ResourceLoader

fun load() {
    val html = resourceLoader.getResource("classpath:html/file.html").file
        .readText(charset = Charsets.UTF_8)
}
4
ответ дан 31 October 2019 в 13:32
val fileContent = javaClass.getResource("/html/file.html").readText()
2
ответ дан 31 October 2019 в 13:32

Пользование библиотекой Google Guava класс Ресурсов:

import com.google.common.io.Resources;

val fileContent: String = Resources.getResource("/html/file.html").readText()
2
ответ дан 31 October 2019 в 13:32

Вы могли бы найти класс Файла полезным:

import java.io.File

fun main(args: Array<String>) {
  val content = File("src/main/resources/input.txt").readText()
  print(content)
} 
1
ответ дан 31 October 2019 в 13:32

Другие вопросы по тегам:

Похожие вопросы: