program tip

Kotlin의 리소스에서 텍스트 파일을 읽는 방법은 무엇입니까?

radiobox 2020. 11. 30. 08:02
반응형

Kotlin의 리소스에서 텍스트 파일을 읽는 방법은 무엇입니까?


Kotlin에서 Spek 테스트를 작성하고 싶습니다. 테스트는 src/test/resources폴더 에서 HTML 파일을 읽어야 합니다. 어떻게하나요?

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") {
                ...
            }
        }
    }
})

val fileContent = MySpec::class.java.getResource("/html/file.html").readText()

또 다른 약간 다른 솔루션 :

@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)
}

이것이 왜 그렇게 어려운지 모르겠지만 내가 찾은 가장 간단한 방법은 (특정 클래스를 참조하지 않고도) 다음과 같습니다.

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

그런 다음 절대 URL을 전달합니다. 예 :

val html = getResourceAsText("/www/index.html")

약간 다른 솔루션 :

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

            var fileContent = ""

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

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

Kotlin + Spring 방식 :

@Autowired
private lateinit var resourceLoader: ResourceLoader

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

val fileContent = javaClass.getResource("/html/file.html").readText()

Google Guava 라이브러리 리소스 클래스 사용 :

import com.google.common.io.Resources;

val fileContent: String = Resources.getResource("/html/file.html").readText()

File 클래스가 유용 할 수 있습니다.

import java.io.File

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

참고 URL : https://stackoverflow.com/questions/42739807/how-to-read-a-text-file-from-resources-in-kotlin

반응형