список файлов в папке ОС Windows без использования двойного обратного слеша - PullRequest
0 голосов
/ 16 октября 2018

Я хочу перечислить файлы в папке ОС Windows.Я хочу использовать адреса файлов Windows в Kotlin без двойной обратной косой черты.Я не хочу, чтобы Kotlin интерпретировал обратную косую черту здесь.

Мой лучший результат на данный момент вы найдете в конце моего вопроса.

Ошибка: (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 голосов
/ 16 октября 2018

Вы должны использовать косую черту в своем коде, JVM автоматически преобразует ее в обратную косую черту в Windows (см. Прямая косая черта или обратная косая черта? ).

Если вы действительно хотите использовать обратную косую черту,необработанные строки """ делают работу, и вам не нужно впоследствии заменять ее вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...