Wie bekomme ich den Dateinamen ohne die Erweiterung in Java?

Lesezeit: 6 Minuten

Wie bekomme ich den Dateinamen ohne die Erweiterung in Java
Iso

Kann mir jemand sagen, wie ich den Dateinamen ohne die Erweiterung bekomme? Beispiel:

fileNameWithExt = "test.xml";
fileNameWithOutExt = "test";

  • Mögliches Duplikat von How to get file name from file path in android

    – Emil Herana

    2. Mai 17 um 11:29 Uhr

1642831626 148 Wie bekomme ich den Dateinamen ohne die Erweiterung in Java
Ulf Lindback

Wenn Sie, wie ich, lieber einen Bibliothekscode verwenden möchten, bei dem sie wahrscheinlich an alle Sonderfälle gedacht haben, z. B. was passiert, wenn Sie vorbeikommen Null oder Punkte im Pfad, aber nicht im Dateinamen, können Sie Folgendes verwenden:

import org.apache.commons.io.FilenameUtils;
String fileNameWithOutExt = FilenameUtils.removeExtension(fileNameWithExt);

  • Sie können FilenameUtils.getBasename auch verwenden, um direkt von einer Pfadzeichenfolge zu einem Dateinamen ohne Erweiterung zu wechseln.

    – Ian Durkan

    28. Januar 11 um 16:37 Uhr

  • Am einfachsten läuft natürlich maven 🙂 Ansonsten siehe: commons.apache.org/io

    – Ulf Lindback

    2. Januar 13 um 13:48 Uhr

  • Für diejenigen, die Guave bevorzugen, kann es dies auch tun. (Heutzutage fühle ich mich persönlich nicht sehr wohl dabei, Apache Commons-Abhängigkeiten hinzuzufügen, obwohl diese Bibliotheken in der Vergangenheit sehr nützlich waren.)

    – Jonik

    10. April 13 um 10:48 Uhr


  • Während Guava und Commons-IO ein wenig mehr bieten, werden Sie überrascht sein, wie viele Convenience-Methoden es bereits gibt in JDK 7 enthalten mit java.nio.file.Files und Path — wie das Auflösen von Basisverzeichnissen, das Kopieren/Verschieben von Dateien in einer Zeile, das Abrufen nur des Dateinamens usw.

    – Don Cheadle

    19. Februar 15 um 20:13 Uhr


  • @Lan Durkan derzeit FilenameUtils.getBaseName mit großem N

    – Langsam Harry

    11. August 16 um 12:21 Uhr

Der einfachste Weg ist die Verwendung eines regulären Ausdrucks.

fileNameWithOutExt = "test.xml".replaceFirst("[.][^.]+$", "");

Der obige Ausdruck entfernt den letzten Punkt gefolgt von einem oder mehreren Zeichen. Hier ist ein grundlegender Komponententest.

public void testRegex() {
    assertEquals("test", "test.xml".replaceFirst("[.][^.]+$", ""));
    assertEquals("test.2", "test.2.xml".replaceFirst("[.][^.]+$", ""));
}

  • Regex ist nicht so einfach zu verwenden wie die obige Bibliothekslösung. Es funktioniert, aber wenn man sich den Code ansieht (ohne die REGEX interpretieren zu müssen), ist nicht klar, was es tut.

    – Gustavo Litowski

    28. November 12 um 21:12 Uhr

  • @GustavoLitovsky Android wird nicht mitgeliefert org.apache.commons. Soweit ich weiß, ist dies die einzige Möglichkeit, dies in Android zu tun.

    – Liam George Betsworth

    6. Juni 14 um 8:56 Uhr


  • /* Die folgende Regex entfernt auch den Pfad */ “/the/path/name.extension”.replaceAll(“.*[\\/]|\.[^\.]*$”,””);

    – daggett

    19. Februar 15 um 10:06 Uhr


  • Ich würde der zweiten Zeichenklasse Schrägstriche hinzufügen, um sicherzustellen, dass Sie nicht über einen Pfad wie “/foo/bar.x/baz” stolpern.

    – Chrisinmtown

    17. Juli 15 um 12:10 Uhr

  • Um sich keine Gedanken über Wege machen zu müssen File Objekt dann getName darauf und verwenden Sie dann diese Regex.

    – Paramvir Singh Karwal

    26. April 21 um 5:19 Uhr

Wie bekomme ich den Dateinamen ohne die Erweiterung in Java
Om.

Hier ist die konsolidierte Listenreihenfolge nach meiner Präferenz.

Verwendung von Apache Commons

import org.apache.commons.io.FilenameUtils;

String fileNameWithoutExt = FilenameUtils.getBaseName(fileName);
                          
                           OR

String fileNameWithOutExt = FilenameUtils.removeExtension(fileName);

Verwenden von Google Guava (falls Sie es bereits verwenden)

import com.google.common.io.Files;
String fileNameWithOutExt = Files.getNameWithoutExtension(fileName);

Dateien.getNameWithoutExtension

Oder mit Core-Java

1)

String fileName = file.getName();
int pos = fileName.lastIndexOf(".");
if (pos > 0 && pos < (fileName.length() - 1)) { // If '.' is not the first or last character.
    fileName = fileName.substring(0, pos);
}
if (fileName.indexOf(".") > 0) {
   return fileName.substring(0, fileName.lastIndexOf("."));
} else {
   return fileName;
}
private static final Pattern ext = Pattern.compile("(?<=.)\.[^.]+$");

public static String getFileNameWithoutExtension(File file) {
    return ext.matcher(file.getName()).replaceAll("");
}

Liferay-API

import com.liferay.portal.kernel.util.FileUtil; 
String fileName = FileUtil.stripExtension(file.getName());

1642831626 636 Wie bekomme ich den Dateinamen ohne die Erweiterung in Java
Jonik

Wenn Ihr Projekt verwendet Guave (14.0 oder neuer), können Sie mit gehen Files.getNameWithoutExtension().

(Im Wesentlichen das gleiche wie FilenameUtils.removeExtension() von Apache Commons IO, wie die Antwort mit der höchsten Bewertung andeutet. Ich wollte nur darauf hinweisen, dass Guava dies auch tut. Persönlich wollte ich Commons keine Abhängigkeit hinzufügen – was meiner Meinung nach ein Relikt ist – nur aus diesem Grund.)

  • Was ist die Erweiterung von foo.tar.gz? Ich kann sehen, warum .tar.gz wäre das was du willst.

    – tchrist

    30. August 11 um 7:03 Uhr

  • @tchrist, foo.tar.gz ist eine gezippte Version von foo.tar so könnte man das auch argumentieren gz war die Erweiterung. Es kommt alles darauf an wie Sie definieren die Erweiterung.

    – paxdiablo

    30. August 11 um 7:38 Uhr

  • was tun mit dateien wie .gitignore?

    – Michael Nesterenko

    25. Juli 2012 um 19:28 Uhr


  • Wie Sie wissen, sollten Klassennamen in Java niemals mit Kleinbuchstaben beginnen!

    – AnujKu

    29. November 13 um 7:05 Uhr

  • Wenn das eine Regel wäre, würde die Sprache sie durchsetzen. Da dies nicht der Fall ist, handelt es sich um eine Richtlinie, wie stark sie auch empfohlen wird. Auf jeden Fall ist das für die Frage und Antwort völlig irrelevant.

    – paxdiablo

    29. November 13 um 08:23 Uhr

Unten ist Referenz von https://android.googlesource.com/platform/tools/tradefederation/+/master/src/com/android/tradefed/util/FileUtil.java

/**
 * Gets the base name, without extension, of given file name.
 * <p/>
 * e.g. getBaseName("file.txt") will return "file"
 *
 * @param fileName
 * @return the base name
 */
public static String getBaseName(String fileName) {
    int index = fileName.lastIndexOf('.');
    if (index == -1) {
        return fileName;
    } else {
        return fileName.substring(0, index);
    }
}

  • Nette Info, aber Benutzer sollten auf Fälle wie “.htaccess” achten, in denen diese Methode “” zurückgibt.

    – Markus Schulte

    27. Oktober 17 um 8:14 Uhr

1642831626 841 Wie bekomme ich den Dateinamen ohne die Erweiterung in Java
Hamzeh Soboh

Wenn Sie nicht die vollständige Datei apache.commons importieren möchten, habe ich dieselbe Funktionalität extrahiert:

public class StringUtils {
    public static String getBaseName(String filename) {
        return removeExtension(getName(filename));
    }

    public static int indexOfLastSeparator(String filename) {
        if(filename == null) {
            return -1;
        } else {
            int lastUnixPos = filename.lastIndexOf(47);
            int lastWindowsPos = filename.lastIndexOf(92);
            return Math.max(lastUnixPos, lastWindowsPos);
        }
    }

    public static String getName(String filename) {
        if(filename == null) {
            return null;
        } else {
            int index = indexOfLastSeparator(filename);
            return filename.substring(index + 1);
        }
    }

    public static String removeExtension(String filename) {
        if(filename == null) {
            return null;
        } else {
            int index = indexOfExtension(filename);
            return index == -1?filename:filename.substring(0, index);
        }
    }

    public static int indexOfExtension(String filename) {
        if(filename == null) {
            return -1;
        } else {
            int extensionPos = filename.lastIndexOf(46);
            int lastSeparator = indexOfLastSeparator(filename);
            return lastSeparator > extensionPos?-1:extensionPos;
        }
    }
}

  • Nette Info, aber Benutzer sollten auf Fälle wie “.htaccess” achten, in denen diese Methode “” zurückgibt.

    – Markus Schulte

    27. Oktober 17 um 8:14 Uhr

1642831627 240 Wie bekomme ich den Dateinamen ohne die Erweiterung in Java
Dan J

Ich bin zwar ein großer Anhänger der Wiederverwendung von Bibliotheken, aber die org.apache.commons.io JAR beträgt 174 KB, was für eine mobile App bemerkenswert groß ist.

Wenn Sie den Quellcode herunterladen und sich die FilenameUtils-Klasse ansehen, können Sie sehen, dass es viele zusätzliche Dienstprogramme gibt, und es kommt mit Windows- und Unix-Pfaden zurecht, was alles sehr schön ist.

Wenn Sie jedoch nur ein paar statische Hilfsmethoden zur Verwendung mit Pfaden im Unix-Stil (mit einem „https://stackoverflow.com/“-Trennzeichen) benötigen, finden Sie den folgenden Code möglicherweise nützlich.

Der removeExtension -Methode behält den Rest des Pfads zusammen mit dem Dateinamen bei. Es gibt auch ein ähnliches getExtension.

/**
 * Remove the file extension from a filename, that may include a path.
 * 
 * e.g. /path/to/myfile.jpg -> /path/to/myfile 
 */
public static String removeExtension(String filename) {
    if (filename == null) {
        return null;
    }

    int index = indexOfExtension(filename);

    if (index == -1) {
        return filename;
    } else {
        return filename.substring(0, index);
    }
}

/**
 * Return the file extension from a filename, including the "."
 * 
 * e.g. /path/to/myfile.jpg -> .jpg
 */
public static String getExtension(String filename) {
    if (filename == null) {
        return null;
    }

    int index = indexOfExtension(filename);

    if (index == -1) {
        return filename;
    } else {
        return filename.substring(index);
    }
}

private static final char EXTENSION_SEPARATOR = '.';
private static final char DIRECTORY_SEPARATOR = "https://stackoverflow.com/";

public static int indexOfExtension(String filename) {

    if (filename == null) {
        return -1;
    }

    // Check that no directory separator appears after the 
    // EXTENSION_SEPARATOR
    int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);

    int lastDirSeparator = filename.lastIndexOf(DIRECTORY_SEPARATOR);

    if (lastDirSeparator > extensionPos) {
        LogIt.w(FileSystemUtil.class, "A directory separator appears after the file extension, assuming there is no file extension");
        return -1;
    }

    return extensionPos;
}

.

586150cookie-checkWie bekomme ich den Dateinamen ohne die Erweiterung in Java?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy