本文執行個體講述了Android開發之簡單檔案管理工具實現方法。分享給大家供大家參考,具體如下:
這裡運用Java I/O、ListActivity、Dialog、Bitmap等實現簡單檔案管理工具,可以查看目錄檔案,修改檔案名稱,刪除檔案,開啟檔案。比較簡單,直接看代碼:
先看布局檔案:
layout/main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
檔案清單布局:
layout/file.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" ><ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp"></TextView></LinearLayout>
修改檔案名稱對話方塊布局檔案:
layout/rename_dialog.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
主Activity:
public class MainActivity extends ListActivity { private static final String ROOT_PATH = "/"; //隱藏檔名稱 private ArrayList<String> names = null; //隱藏檔路徑 private ArrayList<String> paths = null; private View view; private EditText editText; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //顯示檔案清單 showFileDir(ROOT_PATH); } private void showFileDir(String path){ names = new ArrayList<String>(); paths = new ArrayList<String>(); File file = new File(path); File[] files = file.listFiles(); //如果目前的目錄不是根目錄 if (!ROOT_PATH.equals(path)){ names.add("@1"); paths.add(ROOT_PATH); names.add("@2"); paths.add(file.getParent()); } //添加所有檔案 for (File f : files){ names.add(f.getName()); paths.add(f.getPath()); } this.setListAdapter(new MyAdapter(this,names, paths)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { String path = paths.get(position); File file = new File(path); // 檔案存在並可讀 if (file.exists() && file.canRead()){ if (file.isDirectory()){ //顯示子目錄及檔案 showFileDir(path); } else{ //處理檔案 fileHandle(file); } } //沒有許可權 else{ Resources res = getResources(); new AlertDialog.Builder(this).setTitle("Message") .setMessage(res.getString(R.string.no_permission)) .setPositiveButton("OK",new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } super.onListItemClick(l, v, position, id); } //對檔案進行增刪改 private void fileHandle(final File file){ OnClickListener listener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 開啟檔案 if (which == 0){ openFile(file); } //修改檔案名稱 else if(which == 1){ LayoutInflater factory = LayoutInflater.from(MainActivity.this); view = factory.inflate(R.layout.rename_dialog, null); editText = (EditText)view.findViewById(R.id.editText); editText.setText(file.getName()); OnClickListener listener2 = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String modifyName = editText.getText().toString(); final String fpath = file.getParentFile().getPath(); final File newFile = new File(fpath + "/" + modifyName); if (newFile.exists()){ //排除沒有修改情況 if (!modifyName.equals(file.getName())){ new AlertDialog.Builder(MainActivity.this) .setTitle("注意!") .setMessage("檔案名稱已存在,是否覆蓋?") .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (file.renameTo(newFile)){ showFileDir(fpath); displayToast("重新命名成功!"); } else{ displayToast("重新命名失敗!"); } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); } } else{ if (file.renameTo(newFile)){ showFileDir(fpath); displayToast("重新命名成功!"); } else{ displayToast("重新命名失敗!"); } } } }; AlertDialog renameDialog = new AlertDialog.Builder(MainActivity.this).create(); renameDialog.setView(view); renameDialog.setButton("確定", listener2); renameDialog.setButton2("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); renameDialog.show(); } //刪除檔案 else{ new AlertDialog.Builder(MainActivity.this) .setTitle("注意!") .setMessage("確定要刪除此檔案嗎?") .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if(file.delete()){ //更新檔案清單 showFileDir(file.getParent()); displayToast("刪除成功!"); } else{ displayToast("刪除失敗!"); } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } } }; //選擇檔案時,彈出增刪該操作選項對話方塊 String[] menu = {"開啟檔案","重新命名","刪除檔案"}; new AlertDialog.Builder(MainActivity.this) .setTitle("請選擇要進行的操作!") .setItems(menu, listener) .setPositiveButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } //開啟檔案 private void openFile(File file){ Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); String type = getMIMEType(file); intent.setDataAndType(Uri.fromFile(file), type); startActivity(intent); } //擷取檔案mimetype private String getMIMEType(File file){ String type = ""; String name = file.getName(); //副檔名 String end = name.substring(name.lastIndexOf(".") + 1, name.length()).toLowerCase(); if (end.equals("m4a") || end.equals("mp3") || end.equals("wav")){ type = "audio"; } else if(end.equals("mp4") || end.equals("3gp")) { type = "video"; } else if (end.equals("jpg") || end.equals("png") || end.equals("jpeg") || end.equals("bmp") || end.equals("gif")){ type = "image"; } else { //如果無法直接開啟,跳出列表由使用者選擇 type = "*"; } type += "/*"; return type; } private void displayToast(String message){ Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); }}
自訂配接器:
public class MyAdapter extends BaseAdapter{ private LayoutInflater inflater; private Bitmap directory,file; //隱藏檔名稱 private ArrayList<String> names = null; //隱藏檔路徑 private ArrayList<String> paths = null; //參數初始化 public MyAdapter(Context context,ArrayList<String> na,ArrayList<String> pa){ names = na; paths = pa; directory = BitmapFactory.decodeResource(context.getResources(),R.drawable.d); file = BitmapFactory.decodeResource(context.getResources(),R.drawable.f); //縮小圖片 directory = small(directory,0.16f); file = small(file,0.1f); inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return names.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return names.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; if (null == convertView){ convertView = inflater.inflate(R.layout.file, null); holder = new ViewHolder(); holder.text = (TextView)convertView.findViewById(R.id.textView); holder.image = (ImageView)convertView.findViewById(R.id.imageView); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } File f = new File(paths.get(position).toString()); if (names.get(position).equals("@1")){ holder.text.setText("/"); holder.image.setImageBitmap(directory); } else if (names.get(position).equals("@2")){ holder.text.setText(".."); holder.image.setImageBitmap(directory); } else{ holder.text.setText(f.getName()); if (f.isDirectory()){ holder.image.setImageBitmap(directory); } else if (f.isFile()){ holder.image.setImageBitmap(file); } else{ System.out.println(f.getName()); } } return convertView; } private class ViewHolder{ private TextView text; private ImageView image; } private Bitmap small(Bitmap map,float num){ Matrix matrix = new Matrix(); matrix.postScale(num, num); return Bitmap.createBitmap(map,0,0,map.getWidth(),map.getHeight(),matrix,true); }}
因為要對檔案進行操作,所以在描述檔案中授權:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.filemanager" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <strong> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></strong> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
運行結果如下:
查看目錄檔案
檔案重新命名:
刪除檔案:
開啟檔案:
希望本文所述對大家Android程式設計有所協助。