如何在Android中获取文件扩展名? [英] How to get the file extension in Android?
问题描述
我是新手.我有一个EditText和一个浏览按钮来浏览文件夹并仅选择文件.从浏览按钮中,单击文件后,它将在一个字符串中存储该文件的文件夹路径,在另一个字符串中存储无扩展名的文件名,这是我用来将这两个文件之一存储在EditText中的./p>
我想使用精确的文件扩展名(无论是一两个点)还是文件名,但是我也不知道如何获取文件扩展名.
所有答案将不胜感激. FileChooser.java
包com.threefriends.filecrypto;/***由hp创建于2016年1月6日.*/导入java.io.File;导入java.sql.Date;导入java.util.ArrayList;导入java.util.Collections;导入java.util.List;导入java.text.DateFormat;导入android.os.Bundle;导入android.app.ListActivity;导入android.content.Intent;导入android.view.View;导入android.widget.ListView;公共类FileChooser扩展了ListActivity {私有文件currentDir;私有FileArrayAdapter适配器;@Override公共无效onCreate(捆绑保存的InstanceState){super.onCreate(savedInstanceState);currentDir = new File("/sdcard/");填充(currentDir);}私人空白填充(文件f){File [] dirs = f.listFiles();this.setTitle(当前目录:" + f.getName());List< Item> dir =新ArrayList< Item>();List< Item> fls =新ArrayList< Item>();尝试{for(文件ff:目录){日期lastModDate =新日期(ff.lastModified());DateFormat formater = DateFormat.getDateTimeInstance();字符串date_modify = formater.format(lastModDate);if(ff.isDirectory()){File [] fbuf = ff.listFiles();int buf = 0;if(fbuf!= null){buf = fbuf.length;}别的buf = 0;字符串num_item = String.valueOf(buf);if(buf == 0)num_item = num_item +项目";别的num_item = num_item +个项目";//已格式化的字符串= lastModDate.toString();dir.add(new Item(ff.getName(),num_item,date_modify,ff.getAbsolutePath(),"directory_icon"));}别的{fls.add(new Item(ff.getName(),ff.length()+"Byte",date_modify,ff.getAbsolutePath(),"file_icon"));}}} catch(异常e){}Collections.sort(dir);Collections.sort(fls);dir.addAll(fls);if(!f.getName().equalsIgnoreCase("sdcard"))dir.add(0,new Item("..",父目录",",f.getParent(),"directory_up")));adapter = new FileArrayAdapter(FileChooser.this,R.layout.file_view,dir);this.setListAdapter(adapter);}@Override受保护的void onListItemClick(ListView l,View v,int position,long id){//TODO自动生成的方法存根super.onListItemClick(l,v,position,id);项目o = adapter.getItem(position);if(o.getImage().equalsIgnoreCase("directory_icon")|| o.getImage().equalsIgnoreCase("directory_up")){currentDir =新文件(o.getPath());填充(currentDir);}别的{onFileClick(o);}}私人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);结束();}}
MainActivity.java
的一部分 //定义用于文件edittext.EditText editText2;私有静态字符串TAG = MainFragment.class.getSimpleName();//用于文件浏览.私有静态最终int REQUEST_PATH = 1;字符串curFileName;字符串filePath;EditText edittext;@Override公共视图onCreateView(LayoutInflater充气器,ViewGroup容器,捆绑保存的InstanceState){视图view = inflater.inflate(R.layout.fragment_main,container,false);edittext =(EditText)view.findViewById(R.id.editText);//完成文件浏览,EditText,浏览按钮.按钮b1 =(按钮)view.findViewById(R.id.skipButton);b1.setOnClickListener(new View.OnClickListener(){@Override公共无效的onClick(View v){Intent intent1 = new Intent(v.getContext(),FileChooser.class);startActivityForResult(intent1,REQUEST_PATH);}});}public void onActivityResult(int requestCode,int resultCode,Intent data){//查看哪个儿童活动正在给我们回电.如果(requestCode == REQUEST_PATH){如果(resultCode == Activity.RESULT_OK){curFileName = data.getStringExtra("GetFileName");filePath = data.getStringExtra("GetPath");edittext.setText(filePath);}}}
很多方法.这是2个样本-
String someFilepath ="image.fromyesterday.test.jpg";字符串扩展名= someFilepath.substring(someFilepath.lastIndexOf(."));
因此,在您的情况下,应该是这样的
字符串扩展= ff.getAbsolutePath().substring(ff.getAbsolutePath().lastIndexOf(."));
如果您不想自己做的话-
使用FilenameUtils.getExtension "rel =" noreferrer> Apache Commons IO -
字符串扩展名= FilenameUtils.getExtension("/path/to/file/mytext.txt");
或者您的情况-
字符串扩展名= FilenameUtils.getExtension(ff.getAbsolutePath());
I am a newbie. I have an EditText and a Browse Button to explore Folders and select files only. From the Browse Button, when a file is clicked it stores the folder path in which that file is in one string and the file name without extension in other string, which I am using to store, either of these two, in the EditText.
I want to make the file name with the exactly file extension (whether one or two dots), but I don't have any idea how to get the file extension also.
All answers will be appreciated. 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();
}
}
Part of 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);
}
}
}
lots of ways . here are 2 sample-
String someFilepath = "image.fromyesterday.test.jpg";
String extension = someFilepath.substring(someFilepath.lastIndexOf("."));
So in you case, it should be something like that
String extension = ff.getAbsolutePath().substring(ff.getAbsolutePath().lastIndexOf("."));
In case if you don't want to do it yourself-
use FilenameUtils.getExtension from Apache Commons IO-
String extension = FilenameUtils.getExtension("/path/to/file/mytext.txt");
or in your case -
String extension = FilenameUtils.getExtension(ff.getAbsolutePath());
这篇关于如何在Android中获取文件扩展名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!