File.extension în Kotlin

Fișiere (kotlin.io) Kotlin 1.0 (JVM)

extension dă partea de după ultimul punct din numele fișierului; nameWithoutExtension dă numele fără ea.

Sintaxă
val File.extension: String
val File.nameWithoutExtension: String

Ce face File.extension

Pentru File("documente/raport.final.pdf"), extension este "pdf" (fără punct), iar nameWithoutExtension este "raport.final". Se uită doar la numele fișierului, nu la folderele din cale. Dacă numele nu are punct, extensia este textul gol.

Sunt proprietăți, deci se scriu fără paranteze. Nu verifică dacă fișierul există și nici ce conține: un fișier text redenumit poza.jpg are extensia jpg. Extensia păstrează literele mari, așa că pentru comparare folosește lowercase().

Ce returnează

Un String.

Exemple

Exemplul 1: Extensia și numele

La „arhiva.tar.gz” extensia este doar „gz”. Fișierul „Makefile” nu are extensie.

import java.io.File

fun main() {
    for (cale in listOf("documente/raport.final.pdf", "arhiva.tar.gz", "Makefile", "POZA.JPG")) {
        val f = File(cale)
        println("${f.name}: extensie=\"${f.extension}\", nume=\"${f.nameWithoutExtension}\"")
    }
}

Rezultat

raport.final.pdf: extensie="pdf", nume="raport.final"
arhiva.tar.gz: extensie="gz", nume="arhiva.tar"
Makefile: extensie="", nume="Makefile"
POZA.JPG: extensie="JPG", nume="POZA"

Exemplul 2: Schimbarea extensiei

Construim numele nou din nameWithoutExtension și redenumim fișierul.

import java.io.File

fun main() {
    val f = File("notite.txt")
    f.writeText("De citit: Ion Creangă")
    val nou = File(f.nameWithoutExtension + ".md")
    println("Redenumit: ${f.renameTo(nou)}")
    println("${nou.name}: ${nou.readText()}")
}

Rezultat

Redenumit: true
notite.md: De citit: Ion Creangă

Exemplul 3: Gruparea fișierelor după tip

Extensia este transformată în litere mici, ca „JPG” și „jpg” să ajungă în același grup.

fun main() {
    val nume = listOf("a.jpg", "b.JPG", "c.png", "d.pdf", "e.Pdf")
    val grupuri = nume.map { java.io.File(it) }.groupBy({ it.extension.lowercase() }, { it.name })
    println(grupuri)
}

Rezultat

{jpg=[a.jpg, b.JPG], png=[c.png], pdf=[d.pdf, e.Pdf]}

Greșeli frecvente

  • Scrii f.extension(). Este proprietate: f.extension.
  • Compari f.extension == "jpg" și ratezi „POZA.JPG”. Folosește f.extension.lowercase() == "jpg" sau equals(..., ignoreCase = true).

Comenzi înrudite

  • File.walk: Parcurge un director cu toate subdirectoarele și fișierele lui, ca o secvență de obiecte File.
  • String.substringBefore: Returnează partea de text dinaintea sau de după un separator, fără să calculezi poziții.
  • String.startsWith: startsWith verifică dacă textul începe cu un prefix, endsWith dacă se termină cu un sufix.