2016-06-21 97 views
4

我是新手。 我有一個EditText和一個瀏覽按鈕來瀏覽文件夾並僅選擇文件。 從瀏覽按鈕中,單擊一個文件時,它將存儲該文件在一個字符串中的文件夾路徑以及沒有其他字符串中的擴展名的文件名,我將這兩個字符串中的任意一個存儲在EditText中。如何在Android中獲取文件擴展名?

我想使用文件擴展名(無論是一個還是兩個點)來創建文件名,但我也不知道如何獲取文件擴展名。

所有的答案將不勝感激。 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(); 
    } 
} 

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); 
      } 
     } 
    } 
+0

請在「瀏覽文件夾並僅選擇文件」的位置顯示代碼。 – CommonsWare

+0

是的,我編輯它。文件資源管理器還有一些文件,這些文件是邏輯文件,我編輯過的這兩個文件是主要文件。告訴那些人是否也需要。文件的父路徑存儲在filePath和存儲在curFileName中的文件名中。 – Bati

+0

http://stackoverflow.com/questions/3571223/how-do-i-get-the-file-extension-of-a-file-in-java – CommonsWare

回答

19

很多方法。這裏有2樣品 -

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

所以在你的情況下,它應該是類似的東西

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

在情況下,如果你不想做yourself-

使用FilenameUtils.getExtensionApache Commons IO -

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

或在您的案件 -

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

FilenameUtils在ANdroid中未定義 –

+2

@HiteshSahu,它是Apache Commins IO在答案中提到。 –

+0

它會返回什麼'txt'或'.txt'? –

0

功能:

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

用法:

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

PS:如果你不使用toLowerCase(),可能在函數返回大小寫(依賴於文件存在)。

相關問題