特定のファイル名の拡張子を取得するのに問題があります。1 つのファイル URL を受け取ります。
のようかもしれません
/var/www.dir/file.tar.gz OR /var/www.dir/file.exe
ここで、指定された URL からファイル拡張子 (.tar.gz または .exe など) を分割する必要があります。URL は、ユーザーによって動的に指定されます。誰でも私を助けてください、この問題を解決する方法
これはひどく複雑な作業ではありませんが、繰り返し発生する作業です。自分ですぐに作成できるもののように見えますが、実際に作成できます。ただし、これには既製のテスト済みライブラリを使用する必要があります: Apache IO Tools、具体的にはFilenameUtils#getExtension。このようにして、気味の悪いバグや矛盾を回避できます。さらに、他にも多くの役立つ、テスト済みのものを入手できます。
もちろん、ダブルファイル拡張子の場合、ライブラリは拡張子が必要なレベルまで推測できないため、メソッドを複数回使用する必要がある場合があります。これは.gz
ファイルであり、un-gunzipping 後にのみファイルになり.tar
ます。
lastIndexOf
との組み合わせを使用できますindexOf
:
String s = "/var/www.dir/file.tar.gz";
String file = s.substring(s.lastIndexOf("/"));
String extension = file.substring(file.indexOf(".")); // .tar.gz
デモ。
あなたは次のようなことをすることができます:
String str = "/var/www.dir/file.tar.gz";
Matcher m = Pattern.compile(".*/.*?(\\..*)").matcher(str);
if (m.matches()) {
fileExtension = m.group(1);
}
その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();
}
このコードを使用して、ファイル拡張子を取得できます
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);
}
}
私はあなたの質問を間違って読んだことに気づきました。同様の方法で拡張機能を収集することもできますが
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" ]
この時点で、最初の部分はおそらくあなたの名前になり、残りの部分は拡張機能になります。次に、これらを結合して拡張タイプを指定できます。
これに対する最も簡単な解決策は、外れ値 (.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("."));
}
ファイル入力を取得し、「.」を使用して分割します。多分区切りとして?区切り文字を設定するには:
Scanner line_scanner = new Scanner(line).useDelimiter(".");
ファイルの URL を 2 回読み取ります。1 回はファイル名用、もう 1 回は拡張子用です。