File Input / Output
Loading files
Load a text file into a String
val fileContent = File("/path/to/file.txt").readText()
Load a text file into a List<String>
val lines = File("/path/to/file.txt").readLines()
Load binary content into a ByteArray
val bytes = File("/path/to/file.txt").readBytes()
For loading large text files one can use File.bufferedReader()
.
Saving files
Save a String
File("/path/to/file.txt").writeText("Hello")
Save a ByteArray
File("/path/to/file.txt").writeBytes(myByteArray)
For saving large text files one can use File.bufferedWriter()
.
JSON
The GSON library makes it possible to convert JSON files to Kotlin objects and objects back to JSON files. To enable the library:
- Find the
build.gradle.kts
file in your openrndr-template. - Uncomment the line
implementation(libs.gson)
. - Reload gradle.
Loading / converting JSON to an object
// An object matching the JSON file.
// Notice how optional properties are nullable.
data class Entry(var time: Double, var easing: String, var rotx: Double?, var roty: Double?, var x: Double?, var y: Double?, var scale: Double?, var jitter: Double?)
// from disk
// val json = File("/path/to/a/file.json").readText()
// from a string
val json = """
[
{
"time": 0.0,
"easing": "cubic-in-out",
"rotx": 0.0,
"roty": 30.0,
"x": 0.0,
"y": 0.0,
"scale": 1.0,
"jitter": 0.0
},
{
"time": 1.0,
"easing": "cubic-in-out",
"rotx": 0.0,
"x": 20.0,
"y": 0.0,
"scale": 1.0
},
{
"time": 1.3,
"easing": "cubic-in-out"
}
]
""".trimIndent()
fun main() = application {
program {
val gson = Gson()
// The TypeToken type must match the file's structure
val typeToken = object : TypeToken<List<Entry>>() {}
val entries: List<Entry> = gson.fromJson(json, typeToken.type)
entries.forEachIndexed { i, entry ->
println(i)
println(entry)
}
}
}
Saving an object as a JSON file
fun main() = application {
program {
val points = List(20) {
Vector2.uniform(drawer.bounds)
}
//val gson = GsonBuilder().setPrettyPrinting().create()
val gson = Gson()
val json = gson.toJson(points)
File("data/points.json").writeText(json)
}
}
CSV
The kotlin-csv library enables loading and saving CSV files. To enable the library:
- Find the
build.gradle.kts
file in your openrndr-template. - Uncomment the line
implementation(libs.csv)
. - Reload gradle.
Load a CSV file
fun main() = application {
program {
// read from `String`
val csvData = "a,b,c\nd,e,f"
val rowsA = csvReader().readAll(csvData)
// read from `java.io.File`
val file = File("test.csv")
val rowsB = csvReader().readAll(file)
}
}
Save a CSV file
fun main() = application {
program {
val rows = listOf(listOf("a", "b", "c"), listOf("d", "e", "f"))
csvWriter().writeAll(rows, "data/test.csv")
}
}
XML / HTML
The jsoup library enables loading and parsing XML and HTML files. To enable the library:
- Find the
build.gradle.kts
file in your openrndr-template. - Uncomment the line
implementation(libs.jsoup)
. - Reload gradle.
Get Wikipedia home page and parse news headlines
fun main() = application {
program {
val doc = Jsoup.connect("https://en.wikipedia.org/").get()
println(doc.title())
val newsHeadlines = doc.select("#mp-itn b a")
newsHeadlines.forEach {
println(it.attr("title"))
println(it.absUrl("href"))
}
}
}