В моем приложении, когда мы просматриваем файл с sdcard, файл будет .text,.jpg и mpeg4ie видеофайл. Я хочу сохранить каждый тип файла в определенную папку. Например, файлы .text переходят в текстовую папку. Мой вопрос в том, когда я выбираю файл, как проверить расширение файла?
Как проверить расширение файла в android
Ответ 1
Я бы получил имя файла как String, разделил его на массив с помощью "." как разделитель, а затем получить последний индекс массива, который будет расширением файла. Например:
public class main {
public static void main(String[] args) {
String filename = "image.jpg";
String filenameArray[] = filename.split("\\.");
String extension = filenameArray[filenameArray.length-1];
System.out.println(extension);
}
}
Какие выходы:
jpg
Ответ 2
public static String getFileExt(String fileName) {
return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}
Ответ 3
или вы можете просто сделать
MimeTypeMap.getFileExtensionFromUrl(myfile.toURL().toString() );
Примечание: этот метод не очень надежный, хотя..
Ответ 4
Вы можете использовать FilenameUtils в Apache Commons:
String extension = FilenameUtils.getExtension(mFile.getName());
Ответ 5
Вы также можете сделать что-то вроде ниже и использовать endswith.
public void walkdir(File dir) {
String txtPattern = ".txt";
String jpgPattern = ".jpg";
String mp3Pattern = ".mp3";
File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
walkdir(listFile[i]);
} else {
if (listFile[i].getName().endsWith(txtPattern)){
//put in txt folder
}else if (listFile[i].getName().endsWith(jpgPattern.toLowerCase())){
// put in jpg folder
}else if (istFile[i].getName().endsWith(mp3Pattern.toLowerCase())) {
// put in mp3 folder
}
}
}
}
}
Извините, не проверили работу, но она должна сделать это за вас.
Ответ 6
У вас не было возможности запустить это (так что может не работать 100%), но это должно быть то, что вы ищете:
File files[] = Environment.getExternalStorageDirectory().listFiles();
for (File f : files)
{
String fullPath = f.getAbsolutePath();
int dot = fullPath.lastIndexOf(".");
String ext = fullPath.substring(dot + 1);
if(ext.equalsIgnoreCase("txt")) // make sure case is irrelevant for your use case; otherwise use ext.equals("txt")
{
//do something with f here
}
}
Ответ 7
Это работает для меня:
public static String getExtension(String fileName) {
String encoded;
try { encoded = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); }
catch(UnsupportedEncodingException e) { encoded = fileName; }
return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase();
}
Когда файл /mnt/sdcard/boomerang/2013-06-18_12:08:53.txt
, возвращается "txt"
.
Обратите внимание, что вызовы URLEncoder.encode
и .repalce
должны исправить любые проблемы с безопасностью, которые могут возникнуть при вызове MimeTypeMap.getFileExtensionFromUrl
. Например, без вызовов кодирования и замены имена файлов, такие как "Test Image!.jpg"
, возвращают пустые строки. Также убедитесь, что имя файла находится внизу. Он MimeTypeMap
, похоже, не имеет записей для .PNG
или .JPG
.
Ответ 8
Я нашел хороший пример в docs.oracle.com, как получить расширение файла, которое возвращает расширение типа файла в нижнем регистре или null, если есть ' t расширение файла:
/*
* Get the extension of a file.
*/
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
Ответ 9
Самый короткий способ узнать расширение файла - использовать lastIndexOf('.')
, если имя файла содержит расширение. Проверьте следующий код
String fileName = "test.jpg";
int i = fileName.lastIndexOf('.');
String fileExtension = fileName.substring(i+1);
Log.v("FILE EXTENSION: ",fileExtension);
Ответ 10
Если вы хотите получить все файлы с определенными расширениями в определенном каталоге:
File[] files = (new File("/sdcard/yourDirectory/").listFiles(new CustomFilter());
....
class CustomFilter implements FileFilter
{
//Add the file extensions you want to look for here:
private String[] extension =
{ "text", "jpg", "jpeg", "mpeg" };
@Override
public boolean accept(File pathname)
{
String name = pathname.getName().toLowerCase();
for (String anExt : extension)
{
if (name.endsWith(anExt))
{
// A file has been detected with that extension
return true;
}
}
return false;
}
}
Ответ 11
public String getExtension(File file) {
String fileName = file.getName();
try {
if (fileName.contains("\\.")) {
String filenameArray[] = fileName.split("\\.");
extension = filenameArray[filenameArray.length - 1];
} else {
extension = "dir";
}
} catch (Exception e) {
extension = "err";
}
return extension;
}
Ответ 12
Вот метод, который проверяет все случаи
String getExtension(String fileName){
final String emptyExtension = "";
if(fileName == null){
return emptyExtension;
}
int index = fileName.lastIndexOf(".");
if(index == -1){
return emptyExtension;
}
return fileName.substring(index + 1);
}
Ответ 13
Материал имеет .endsWith( "ваше расширение" )
String whatever = you String;
if(whatever.endsWith("jpg")){
// your jpg code
}else if(whatever.endsWith("png")){
// your png code
}