如何在Windows系统下用Kotlin(Android Studio)清除控制台
在Windows下的Kotlin控制台程序中清除控制台的方法
方法一:调用Windows系统cls命令(推荐)
直接通过Kotlin执行系统命令清除控制台,无需额外依赖,在Windows环境下稳定有效:
fun clearConsole() { // 启动命令提示符执行cls命令,inheritIO()让操作同步到当前控制台 ProcessBuilder("cmd.exe", "/c", "cls") .inheritIO() .start() .waitFor() // 等待命令执行完成 }
调用该函数后,控制台会立即被清空。cmd.exe /c cls的作用是启动命令提示符、执行清空命令后自动退出,inheritIO()确保命令效果直接作用于当前程序的控制台窗口。
方法二:使用ANSI转义序列(需控制台支持)
Windows 10及以上版本的控制台支持VT100虚拟终端,可通过输出ANSI转义序列清空控制台:
fun clearConsoleWithAnsi() { // 输出转义序列:光标移至左上角 + 清空屏幕 print("\u001b[H\u001b[2J") // 强制刷新输出流,确保转义序列立即生效 System.out.flush() }
若控制台默认不支持VT100,需先开启虚拟终端支持(需引入JNA依赖):
- 在项目
build.gradle中添加依赖:
dependencies { implementation 'net.java.dev.jna:jna:5.13.0' implementation 'net.java.dev.jna:jna-platform:5.13.0' }
- 添加开启虚拟终端的代码:
import com.sun.jna.Library import com.sun.jna.Native import com.sun.jna.Pointer interface Kernel32 : Library { companion object { const val STD_OUTPUT_HANDLE = -11 const val ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 val INSTANCE: Kernel32 = Native.load("kernel32", Kernel32::class.java) } fun GetStdHandle(nStdHandle: Int): Pointer? fun GetConsoleMode(hConsoleHandle: Pointer?, lpMode: IntArray): Boolean fun SetConsoleMode(hConsoleHandle: Pointer?, dwMode: Int): Boolean } fun enableVirtualTerminalSupport() { val handle = Kernel32.INSTANCE.GetStdHandle(Kernel32.STD_OUTPUT_HANDLE) val mode = IntArray(1) if (Kernel32.INSTANCE.GetConsoleMode(handle, mode)) { Kernel32.INSTANCE.SetConsoleMode(handle, mode[0] or Kernel32.ENABLE_VIRTUAL_TERMINAL_PROCESSING) } }
在程序启动时调用enableVirtualTerminalSupport(),之后即可用ANSI转义序列方式清空控制台。
内容的提问来源于stack exchange,提问作者Ali Farhad
相关产品推荐
相关产品推荐

