列出Windows OS文件夹的文件,而不使用双反斜杠文件分隔符

时间:2018-10-16 03:18:52

标签: kotlin

我想列出Windows OS文件夹的文件。 我想在Kotlin中使用Windows文件地址而不使用双反斜杠。 我不希望科特林在这里解释反斜杠。

当我在问题末尾找到的那一刻是我最好的结果。

错误:(3,24)Kotlin:非法转义:'\ M'返回以下内容:

fun main(args: Array<String>) {
    var s: String = "G:\My Web Sites\"
    println(s)
}

我不想每次都用反斜杠来屏蔽反斜杠。我认为它看起来不好,不能轻易地来回复制。

有效但不美观:

fun main(args: Array<String>) {
    var s: String = "G:\\My Web Sites\\"
    println(s)
}

解决方法:

也许我会一直做下去,直到找到其他解决方案为止。

是否有机会切换File.separator?

当然,这给了我同样的错误,因为替换为时已晚:

import java.io.File
fun main(args: Array<String>) {
    var s: String = "G:\My Web Sites\"
    val replace = s.replace('/', File.separatorChar);
    println(replace)
}

最佳结果:

我得到的最佳结果如下。它返回正确的文件字符串,但现在返回文件夹中的文件。 它返回正确的字符串: “ G:\\我的网站\\”

import java.io.File

fun main(args: Array<String>) {
    var s = """"G:\My Web Sites\"""
    println(s)
    s= s.replace("\\", "\\\\")
    println(s)
    File(s).walk().forEach  { println(it) }
}


private fun String.replace(regex: Regex, notMatched: (String) -> String, matched: (MatchResult) -> String): String {
//    its from https://github.com/http4k/http4k/blob/master/http4k-core/src/main/kotlin/org/http4k/core/UriTemplate.kt
    val matches = regex.findAll(this)
    val builder = StringBuilder()
    var position = 0
    for (matchResult in matches) {
        val before = substring(position, matchResult.range.start)
        if (before.isNotEmpty()) builder.append(notMatched(before))
        builder.append(matched(matchResult))
        position = matchResult.range.endInclusive + 1
    }
    val after = substring(position, length)
    if (after.isNotEmpty()) builder.append(notMatched(after))
    return builder.toString()
}

1 个答案:

答案 0 :(得分:1)

您应在代码中使用斜杠,JVM将在Windows上将其自动转换为反斜杠(请参见Forward slash or backslash?)。

如果您真的想使用反斜杠,则可以使用原始字符串"""进行操作,而后无需手动替换。