4

特定のファイル名の拡張子を取得するのに問題があります。1 つのファイル URL を受け取ります。
のようかもしれません

/var/www.dir/file.tar.gz OR /var/www.dir/file.exe

ここで、指定された URL からファイル拡張子 (.tar.gz または .exe など) を分割する必要があります。URL は、ユーザーによって動的に指定されます。誰でも私を助けてください、この問題を解決する方法

4

8 に答える 8

8

これはひどく複雑な作業ではありませんが、繰り返し発生する作業です。自分ですぐに作成できるもののように見えますが、実際に作成できます。ただし、これには既製のテスト済みライブラリを使用する必要があります: Apache IO Tools、具体的にはFilenameUtils#getExtension。このようにして、気味の悪いバグや矛盾を回避できます。さらに、他にも多くの役立つ、テスト済みのものを入手できます。

もちろん、ダブルファイル拡張子の場合、ライブラリは拡張子が必要なレベルまで推測できないため、メソッドを複数回使用する必要がある場合があります。これは.gzファイルであり、un-gunzipping 後にのみファイルになり.tarます。

于 2012-11-26T12:45:23.720 に答える
4

lastIndexOfとの組み合わせを使用できますindexOf

String s = "/var/www.dir/file.tar.gz";
String file = s.substring(s.lastIndexOf("/"));
String extension = file.substring(file.indexOf(".")); // .tar.gz

デモ

于 2012-09-19T21:41:52.610 に答える
3

あなたは次のようなことをすることができます:

String str = "/var/www.dir/file.tar.gz";
Matcher m = Pattern.compile(".*/.*?(\\..*)").matcher(str);
if (m.matches()) {
   fileExtension = m.group(1);
}
于 2012-09-19T21:40:02.260 に答える
0

そのURLパターンが「/somurl/blah-blah/filename.extension」であると仮定します。問題の解決策として、次のコードスニペットをお勧めします。

String getFileExtension(String url) {
    String[] urlSplit = url.split("/");
    String filename = urlSplit[urlSplit.length - 1];
    String[] nameSplit = filename.split("[.]");
    StringBuffer fileExtension = new StringBuffer();
// to prevent appending . after extension type                                      
    if (nameSplit.length > 1) {
        for (int index = 1; index < nameSplit.length; index++) {
            if (index != nameSplit.length - 1)
                fileExtension.append(nameSplit[index] + ".");
            else
                fileExtension.append(nameSplit[index]);
        }
    } else {
        fileExtension.append(nameSplit[0]);
    }
    return fileExtension.toString();
}
于 2012-12-30T15:44:01.123 に答える
0

このコードを使用して、ファイル拡張子を取得できます

public static String getFileExtension(String filename)
{
if (filename == null) {
            return null;
}
int lastUnixPos = filename.lastIndexOf('/');
int lastWindowsPos = filename.lastIndexOf('\\');
int indexOfLastSeparator = Math.max(lastUnixPos, lastWindowsPos);
int extensionPos = filename.lastIndexOf('.');
int lastSeparator = indexOfLastSeparator;
int indexOfExtension = lastSeparator > extensionPos ? -1 : extensionPos;
int index = indexOfExtension;
if (index == -1) {
  return "";
} else {
  return filename.substring(index + 1);
}
}
于 2012-12-30T14:47:54.980 に答える
0

私はあなたの質問を間違って読んだことに気づきました。同様の方法で拡張機能を収集することもできますが

String yourString = "/your/whole/path.ext.si.ons";
String[] pathPieces = yourString.split("/"); // [ "your", "whole", "path.ext.si.ons" ]

String lastPiece = pathPieces[pathPieces.length - 1];
String[] namePieces = lastPiece.split("."); // [ "path", "ext", "si", "ions" ]

この時点で、最初の部分はおそらくあなたの名前になり、残りの部分は拡張機能になります。次に、これらを結合して拡張タイプを指定できます。

于 2012-09-19T21:42:42.267 に答える
0

これに対する最も簡単な解決策は、外れ値 (.tar.gz など) に対して個別のケースを作成し、残りを同じものとして扱うこと (つまり、最後の.文字の後のすべてを処理すること) のようです。

複数の文字を含む拡張機能.は非常にまれであるため、必要なものを解析するための複雑な方法は必要ありません。そう:

int length = url.length();
String extension = null;
if(url.substring(length-7).equalsIgnoreCase(".tar.gz")) {
    //special case
} else {
    extension = url.substring(url.lastIndexOf("."));
}
于 2012-09-19T21:36:04.467 に答える
-1

ファイル入力を取得し、「.」を使用して分割します。多分区切りとして?区切り文字を設定するには:

Scanner line_scanner = new Scanner(line).useDelimiter(".");

ファイルの URL を 2 回読み取ります。1 回はファイル名用、もう 1 回は拡張子用です。

于 2012-09-19T21:36:48.470 に答える