web-dev-qa-db-ja.com

javaのURL /パスからファイル名を削除します

URLまたは文字列からファイル名を削除するにはどうすればよいですか?

String os = System.getProperty("os.name").toLowerCase();
        String nativeDir = Game.class.getProtectionDomain().getCodeSource().getLocation().getFile().toString();

        //Remove the <name>.jar from the string
        if(nativeDir.endsWith(".jar"))
            nativeDir = nativeDir.substring(0, nativeDir.lastIndexOf("/"));

        //Load the right native files
        for(File f : (new File(nativeDir + File.separator + "lib" + File.separator + "native")).listFiles()){
            if(f.isDirectory() && os.contains(f.getName().toLowerCase())){
                System.setProperty("org.lwjgl.librarypath", f.getAbsolutePath()); break;
            }
        }

それは私が今持っているものであり、それはうまくいきます。私が知っていることから、私は "/"を使用しているので、それはウィンドウに対してのみ機能します。プラットフォームに依存しないようにしたい

18
Yemto

org.Apache.commons.io.FilenameUtils の使用を検討してください

基本パス、ファイル名、拡張子などを任意の種類のファイル区切り文字で抽出できます。

String url = "C:\\windows\\system32\\cmd.exe";

String baseUrl = FilenameUtils.getPath(url);
String myFile = FilenameUtils.getBaseName(url)
                + "." + FilenameUtils.getExtension(url);

System.out.println(baseUrl);
System.out.println(myFile);

与える

windows\system32\
cmd.exe

URL付き; String url = "C:/windows/system32/cmd.exe";

それは与えるでしょう。

windows/system32/
cmd.exe
20
PopoFibo

Java.nio.fileを使用することにより、 (J2SE 1.7以降に導入されたafaik)これは単に私の問題を解決しました:

Path path = Paths.get(fileNameWithFullPath);
String directory = path.getParent().toString();
11
saygley

別の行でFile.separatorを使用しています。それをlastIndexOf()にも使用しないのはなぜですか?

nativeDir = nativeDir.substring(0, nativeDir.lastIndexOf(File.separator));
10
Dirk Fauth

標準ライブラリは、Java 7)でこれを処理できます

Path pathOnly;

if (file.getNameCount() > 0) {
  pathOnly = file.subpath(0, file.getNameCount() - 1);
} else {
  pathOnly = file;
}

fileFunction.accept(pathOnly, file.getFileName());
3
Jeremy Sigrist

この問題は正規表現を使用して解決します。

Windowsの場合:

String path = "";
String filename = "d:\\folder1\\subfolder11\\file.ext";
String regEx4Win = "\\\\(?=[^\\\\]+$)";
String[] tokens = filename.split(regEx4Win);
if (tokens.length > 0)
   path = tokens[0]; // path -> d:\folder1\subfolder11
0

「/」の代わりに _File.separator_ を使用します。プラットフォームに応じて、_/_または_\_のいずれかになります。これで問題が解決しない場合は、 FileSystem.getSeparator() を使用します。デフォルトではなく、さまざまなファイルシステムを渡すことができます。

0

[古いスレッドに返信^ _ ^]

http://farenda.com/Java/java-filename-from-path/ によって通知されるように、Java SE 7または8の_Java.nio.file_のクラス

これは、パスからファイル名を取得する最も簡単な方法です。

Path path = Paths.get("/proc/version"); System.out.println("path.getFileName(): " + path.getFileName().toString());

上記のコードは以下を生成します:path.getFileName(): version

0
Vegan for Peace