web-dev-qa-db-fra.com

Comment obtenir l'extension de fichier sous Android?

Je suis un novice . J'ai un EditText et un bouton Parcourir pour explorer les dossiers et sélectionner des fichiers uniquement . À partir du bouton Parcourir, lorsqu'un fichier est cliqué, il stocke le chemin du dossier dans lequel ce fichier est dans une chaîne. et le nom de fichier sans extension dans une autre chaîne, que j'utilise pour stocker l'une ou l'autre de ces deux dans EditText.

Je veux faire le nom de fichier avec l'extension de fichier exacte (un ou deux points), mais je ne sais pas comment obtenir l'extension de fichier également.

Toutes les réponses seront appréciées . FileChooser.Java

    package com.threefriends.filecrypto;

/**
 * Created by hp on 01-06-2016.
 */

import Java.io.File;
import Java.sql.Date;
import Java.util.ArrayList; 
import Java.util.Collections;
import Java.util.List;
import Java.text.DateFormat;
import Android.os.Bundle;
import Android.app.ListActivity;
import Android.content.Intent; 
import Android.view.View;
import Android.widget.ListView; 

public class FileChooser extends ListActivity {

    private File currentDir;
    private FileArrayAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        currentDir=new File("/sdcard/");
        fill(currentDir); 
    }
    private void fill(File f)
    {
        File[]dirs=f.listFiles();
        this.setTitle("Current Dir: "+f.getName());
        List<Item>dir=new ArrayList<Item>();
        List<Item>fls=new ArrayList<Item>();
        try{
             for(File ff: dirs)
             { 
                Date lastModDate=new Date(ff.lastModified());
                DateFormat formater=DateFormat.getDateTimeInstance();
                String date_modify=formater.format(lastModDate);
                if(ff.isDirectory()){


                    File[] fbuf=ff.listFiles();
                    int buf=0;
                    if(fbuf != null){ 
                        buf=fbuf.length;
                    } 
                    else
                        buf=0;
                    String num_item=String.valueOf(buf);
                    if(buf == 0)
                        num_item=num_item+" item";
                    else
                        num_item = num_item+" items";

                    //String formated = lastModDate.toString();
                    dir.add(new Item(ff.getName(), num_item, date_modify, ff.getAbsolutePath(), "directory_icon"));
                }
                else
                {
                    fls.add(new Item(ff.getName(), ff.length()+" Byte", date_modify, ff.getAbsolutePath(), "file_icon"));
                }
             }
        }catch(Exception e)
        {

        }
        Collections.sort(dir);
        Collections.sort(fls);
        dir.addAll(fls);
        if(!f.getName().equalsIgnoreCase("sdcard"))
            dir.add(0, new Item("..", "Parent Directory", "", f.getParent(), "directory_up"));
        adapter=new FileArrayAdapter(FileChooser.this, R.layout.file_view, dir);
        this.setListAdapter(adapter);
    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id){
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Item o = adapter.getItem(position);
        if(o.getImage().equalsIgnoreCase("directory_icon") || o.getImage().equalsIgnoreCase("directory_up")){
                currentDir=new File(o.getPath());
                fill(currentDir);
        }
        else
        {
            onFileClick(o);
        }
    }
    private void onFileClick(Item o)
    {
        //Toast.makeText(this, "Folder Clicked: "+ currentDir, Toast.LENGTH_SHORT).show();
        Intent intent = new Intent();
        intent.putExtra("GetPath", currentDir.toString());
        intent.putExtra("GetFileName", o.getName());
        setResult(RESULT_OK, intent);
        finish();
    }
}

Partie de MainActivity.Java

//Defined for file edittext.
    EditText editText2;
 private static String TAG = MainFragment.class.getSimpleName(); //For File Exploring.
    private static final int REQUEST_PATH = 1;
    String curFileName;
    String filePath;
    EditText edittext;
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment_main, container, false);

        edittext = (EditText) view.findViewById(R.id.editText);  //Done for File Exploring, EditText, Browse Button.
        Button b1 = (Button) view.findViewById(R.id.skipButton);
        b1.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent1 = new Intent(v.getContext(), FileChooser.class);
                startActivityForResult(intent1, REQUEST_PATH);
            }
        }
        );
}
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // See which child activity is calling us back.
        if (requestCode == REQUEST_PATH)
        {
            if (resultCode == Activity.RESULT_OK)
            {
                curFileName = data.getStringExtra("GetFileName");
                filePath=data.getStringExtra("GetPath");
                edittext.setText(filePath);
            }
        }
    }
12
Bati

beaucoup de façons. voici 2 exemples-

String someFilepath = "image.fromyesterday.test.jpg"; 
String extension = someFilepath.substring(someFilepath.lastIndexOf("."));

Donc dans votre cas, ça devrait être quelque chose comme ça 

String extension = ff.getAbsolutePath().substring(ff.getAbsolutePath().lastIndexOf("."));

Au cas où vous ne voudriez pas le faire vous-même

utilisez FilenameUtils.getExtension from Apache Commons IO -

String extension = FilenameUtils.getExtension("/path/to/file/mytext.txt");

ou dans votre cas -

String extension = FilenameUtils.getExtension(ff.getAbsolutePath());
38
Amit K. Saha

Vous pouvez simplement le faire avec une seule ligne de code en utilisant MIME Type Map.

Prenez d'abord le fichier:

Uri file = Uri.fromFile(new File(filePath));

Ensuite

String fileExt = MimeTypeMap.getFileExtensionFromUrl(file.toString());
6
Acheme Paul

Une fonction:

public String getExt(String filePath){
        int strLength = filePath.lastIndexOf(".");
        if(strLength > 0)
            return filePath.substring(strLength + 1).toLowerCase();
        return null;
    }

Usage:

String ext = getExt(path);
if(ext != null && ext.equals("txt")){
    // do anything
}

PS: Si vous n'utilisez pas toLowerCase (), la fonction peut éventuellement renvoyer des majuscules et des minuscules (dépend du fichier existant).

0
Eugen