跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kotlin输入输出
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Kotlin输入输出}} '''Kotlin输入输出'''(I/O)是程序与外部环境交互的基础操作,包括从控制台读取输入、向控制台输出数据以及文件读写操作。本文将详细介绍Kotlin中的标准I/O操作和文件I/O操作,适合初学者和需要复习核心概念的高级开发者。 == 标准输入输出 == Kotlin通过标准库提供简洁的I/O操作函数,主要依赖以下方法: * '''输出''':`print()`和`println()` * '''输入''':`readLine()`、`readln()`和`Scanner`类 === 控制台输出 === 使用`print()`和`println()`函数向控制台输出内容,后者会在输出后追加换行符。 <syntaxhighlight lang="kotlin"> fun main() { print("Hello, ") // 不换行 println("Kotlin!") // 自动换行 println("1 + 2 = ${1 + 2}") // 字符串模板 } </syntaxhighlight> 输出: <pre> Hello, Kotlin! 1 + 2 = 3 </pre> === 控制台输入 === Kotlin提供多种输入方式: ==== 1. readLine() ==== 读取整行输入(返回可空String类型): <syntaxhighlight lang="kotlin"> fun main() { print("Enter your name: ") val name = readLine() println("Hello, $name!") } </syntaxhighlight> 输入/输出示例: <pre> Enter your name: Alice Hello, Alice! </pre> ==== 2. readln() ==== Kotlin 1.6+引入的非空版本(直接返回String): <syntaxhighlight lang="kotlin"> val age = readln().toInt() // 直接转换为整型 </syntaxhighlight> ==== 3. Scanner类 ==== 适合需要解析特定数据类型时使用: <syntaxhighlight lang="kotlin"> import java.util.Scanner fun main() { val scanner = Scanner(System.`in`) print("Enter 3 numbers: ") val a = scanner.nextInt() val b = scanner.nextDouble() val c = scanner.nextBoolean() println("You entered: $a, $b, $c") } </syntaxhighlight> 输入/输出示例: <pre> Enter 3 numbers: 42 3.14 true You entered: 42, 3.14, true </pre> == 文件I/O操作 == Kotlin通过扩展函数简化了Java的文件操作API。 === 写入文件 === <syntaxhighlight lang="kotlin"> import java.io.File fun main() { // 方式1:直接写入字符串 File("data.txt").writeText("Hello\nKotlin") // 方式2:追加内容 File("data.txt").appendText("\nMore text") // 方式3:逐行写入集合 val lines = listOf("First", "Second", "Third") File("lines.txt").writeLines(lines) } </syntaxhighlight> === 读取文件 === <syntaxhighlight lang="kotlin"> fun main() { // 读取为单个字符串 val content = File("data.txt").readText() println(content) // 按行读取为List val lines = File("lines.txt").readLines() lines.forEachIndexed { i, line -> println("${i + 1}: $line") } // 使用useLines处理大文件(自动关闭资源) File("large.txt").useLines { seq -> seq.take(5).forEach(::println) } } </syntaxhighlight> == 高级I/O操作 == === 缓冲读写 === 对于性能敏感场景,应使用缓冲流: <syntaxhighlight lang="kotlin"> File("data.bin").outputStream().buffered().use { it.write("Binary data".toByteArray()) } File("data.bin").inputStream().buffered().use { println(it.readBytes().toString(Charsets.UTF_8)) } </syntaxhighlight> === 序列化/反序列化 === 结合Kotlin序列化库处理结构化数据: <syntaxhighlight lang="kotlin"> @Serializable data class Person(val name: String, val age: Int) fun main() { val person = Person("Bob", 25) // 序列化为JSON val json = Json.encodeToString(person) File("person.json").writeText(json) // 从JSON反序列化 val loaded = Json.decodeFromString<Person>(File("person.json").readText()) println(loaded) } </syntaxhighlight> == 实际应用案例 == === 案例1:配置文件处理器 === <syntaxhighlight lang="kotlin"> fun loadConfig(path: String): Map<String, String> { return File(path).readLines() .filter { it.isNotBlank() && !it.startsWith("#") } .associate { val (key, value) = it.split("=", limit = 2) key.trim() to value.trim() } } fun saveConfig(path: String, config: Map<String, String>) { File(path).writeText( config.entries.joinToString("\n") { "${it.key}=${it.value}" } ) } </syntaxhighlight> === 案例2:日志记录器 === <syntaxhighlight lang="kotlin"> class FileLogger(private val file: File) { init { if (!file.exists()) file.createNewFile() } fun log(message: String) { file.appendText("${LocalDateTime.now()}: $message\n") } } </syntaxhighlight> == 性能考虑 == 通过流程图展示文件处理的最佳实践: <mermaid> graph TD A[开始I/O操作] --> B{操作类型} B -->|小文件| C[直接readText/writeText] B -->|大文件| D[使用缓冲流] B -->|行处理| E[useLines] C --> F[完成] D --> F E --> F </mermaid> == 数学公式示例 == 当处理二进制数据时,可能需要计算校验和: <math>\text{Checksum} = \sum_{i=1}^{n} (byte_i \mod 256)</math> == 总结 == Kotlin通过以下方式简化I/O操作: * 标准I/O:`println()`/`readLine()`快速实现控制台交互 * 文件操作:扩展函数使文件读写更符合Kotlin习惯 * 流处理:提供资源自动管理(`use`块)和缓冲优化 * 类型安全:与Kotlin特性(如空安全、扩展函数)深度集成 建议开发者根据数据规模选择合适的I/O方式,并始终注意资源释放问题。 [[Category:编程语言]] [[Category:Kotlin]] [[Category:Kotlin基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)