Wie bekomme ich die Dateierweiterung in Android?

Lesezeit: 6 Minuten

Batis Benutzeravatar
Bati

Ich bin ein Neuling. Ich habe eine EditText- und eine Browse-Schaltfläche, um Ordner zu durchsuchen und nur Dateien auszuwählen. Wenn auf der Schaltfläche „Durchsuchen“ auf eine Datei geklickt wird, speichert sie den Ordnerpfad, in dem sich diese Datei befindet, in einer Zeichenfolge und den Dateinamen ohne Erweiterung in einer anderen Zeichenfolge, die ich verwende, um eine dieser beiden im EditText zu speichern.

Ich möchte den Dateinamen mit genau der Dateierweiterung erstellen (ob ein oder zwei Punkte), aber ich habe keine Ahnung, wie ich auch die Dateierweiterung erhalten soll.

Alle Antworten werden geschätzt.
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();
    }
}

Teil von 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);
            }
        }
    }

  • Bitte zeigen Sie den Code, in dem Sie “Ordner durchsuchen und nur Dateien auswählen”.

    – CommonsWare

    21. Juni 2016 um 18:26 Uhr

  • Ja, ich habe es bearbeitet. Es gibt einige weitere Dateien für den Datei-Explorer, die sind für die Logik, diese beiden, die ich bearbeitet habe, sind die Hauptdateien. Sagen Sie, ob die auch benötigt werden. Der übergeordnete Pfad der Datei wird in filePath und der Dateiname in curFileName gespeichert.

    – Bati

    21. Juni 2016 um 18:33 Uhr


  • stackoverflow.com/questions/3571223/…

    – CommonsWare

    21. Juni 2016 um 18:44 Uhr

viele Wege. Hier sind 2 Beispiel-

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

Also in deinem Fall sollte es so ähnlich sein

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

Falls Sie es nicht selbst tun möchten –

verwenden DateinameUtils.getExtension aus Apache Commons IO

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

oder in deinem Fall –

String extension = FilenameUtils.getExtension(ff.getAbsolutePath());

  • FilenameUtils ist in Android nicht definiert

    – Hitesh Sahu

    9. März 2017 um 13:51 Uhr

  • @HiteshSahu, es ist Teil von Apache Commins IO, das in der Antwort erwähnt wird.

    – Amit K. Saha

    13. März 2017 um 17:42 Uhr


  • was wird es zurückgeben txt oder .txt?

    – Daksh Agrawal

    9. Januar 2018 um 7:16 Uhr

  • sollte “txt” zurückgeben. @DakshAgrawal

    – Amit K. Saha

    30. Januar 2018 um 22:15 Uhr

  • @AmitK.Saha das erste Beispiel gibt “.txt” zurück

    – Eugen

    2. März 2018 um 13:19 Uhr


Sie könnten es einfach mit einer Codezeile mit MIME Type Map tun.

Schnappen Sie sich zuerst die Datei:

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

Dann

String fileExt = MimeTypeMap.getFileExtensionFromUrl(file.toString());

  • Beste und einfach eingebaute Lösung. Dies ist der eigentliche Weg, um die Erweiterung zu finden.

    – Anand Savjani

    5. April 2019 um 14:58 Uhr

  • Dies erhält nichts, wenn ein Leerzeichen vor “.” im Dateinamen

    – mostafa3dmax

    14. Juni 2020 um 5:12 Uhr

  • Wie wichtig ist es, zuerst die Datei zu greifen? Kann es schaden, nur die Dateinamenzeichenfolge zu übergeben?

    – Trevortni

    16. Juli 2020 um 21:12 Uhr

  • @AnandSavjani funktioniert nicht für “/storage/emulated/0/Download/download (1).jpeg” “/storage/emulated/0/Download/download (1) .jpeg”

    – Ganesh-Pokal

    18. Oktober 2021 um 6:47 Uhr


  • Verwenden Sie dies nicht. Dies funktioniert nicht, wenn der Dateiname Sonderzeichen enthält.

    – Amit Bhandari

    20. Dezember 2021 um 8:49 Uhr

Benutzeravatar von Nice umang
Schön umang

Sie können Ihren Code wie folgt in Ihre Aktivität einfügen:

    private String getfileExtension(Uri uri)
        {
            String extension;
            ContentResolver contentResolver = getContentResolver();
            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
            extension= mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri)); 
            return extension;
        }

“uri” ist die Datei uri aus der als Ergebnis der “Durchsuchen-Schaltfläche” ausgewählten Datei

Benutzeravatar von mad_lad
verrückter_junge

Kotlin-Ansatz:

val fileExtention: String = file.extension

Überprüfen Sie dies: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/extension.html

Funktion:

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

Verwendung:

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

PS: Wenn Sie toLowerCase() nicht verwenden, gibt die Funktion möglicherweise Groß- und Kleinbuchstaben zurück (abhängig von der vorhandenen Datei).

Benutzeravatar von Fuad Reza
Fuad Reza

In Kotlin

Sie können die MimeTypeMap-Dokumentation lesen Hier

Dies ist ein Beispiel, wenn Sie verwenden startActivityForResult und Sie erhalten Daten daraus. Dann definierst du Content Resolver um den Mime-Typ aus dem URI zu bekommen.

val uri: Uri? = it.data?.data
val contentResolver = requireContext().contentResolver
val stringMimeType = contentResolver.getType(uri!!)

Wenn Sie diesen Code verwenden und eine PDF-Datei auswählen, erhalten Sie so etwas wie

“antrag/pdf”

Danach mit der MimeTypeMap Sie erhalten die Erweiterungen. Vergessen Sie nicht, dass Sie hinzufügen sollten getSingleton() weil es nur in Singleton verfügbar ist.

val stringFileType = MimeTypeMap.getSingleton().getExtensionFromMimeType(stringMimeType)

Benutzeravatar von Saeef MD Zulker Naeen
Saeef MD Zulker Naeen

Ich habe DocumentFile verwendet, um den Dateinamen und die Erweiterung zu erhalten

DocumentFile documentFile = DocumentFile.fromSingleUri(YourActivity.this, fileUri);

String fileName = documentFile.getName();
String extension = fileName.substring(fileName.lastIndexOf("."));

Wenn Ihr Dateiname beispielsweise „Ihr_Bild.jpg“ lautet, lautet die Erweiterung „.jpg“.

1443080cookie-checkWie bekomme ich die Dateierweiterung in Android?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy