2016-06-21 17 views
4

私は初心者です。 私はEditTextとBrowseボタンを持っていて、フォルダを探索し、ファイルのみを選択します。 [参照]ボタンから、ファイルをクリックすると、そのファイルが1つの文字列内にあるフォルダパスと、これらのいずれかを編集テキストに格納するために使用している他の文字列内の拡張子のないファイル名が格納されます。Androidでファイル拡張子を取得する方法は?

ファイル名を正確にファイル拡張子(1つまたは2つのドット)で作成したいのですが、ファイル拡張子を取得する方法もわかりません。

すべての回答が高く評価されます。 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

はい、私はそれを編集しました。ファイルエクスプローラのためのいくつかのファイルがあります。それらはロジック用です。私が編集したこれらの2つはメインファイルです。それらが必要であるかどうかを教えてください。ファイルの親パスは、curFileNameに格納されているfilePathとFile nameに格納されています。 – Bati

+0

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

答えて

19

たくさん。ここであなたはそれから

使用FilenameUtils.getExtensionをyourself-行うにはしたくないのであれば、あなたの場合には、それは場合にはその

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

のようなものでなければなりません2サンプル -

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

です

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

またはあなたのケースで - - Apache Commons IO

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メソッドを()、使用しない場合は関数は、上下のケースを返します(依存インクルードファイルが存在します)。

関連する問題