這裡運用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();
- }
- }