?? filemanager.java
字號(hào):
package com.yarin.android.FileManager;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Collections;import java.util.List;import android.app.AlertDialog;import android.app.ListActivity;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.Intent;import android.content.DialogInterface.OnClickListener;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;public class FileManager extends ListActivity{ private List<IconifiedText> directoryEntries = new ArrayList<IconifiedText>(); private File currentDirectory = new File("/"); private File myTmpFile = null; private int myTmpOpt = -1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); browseToRoot(); this.setSelection(0); } //瀏覽文件系統(tǒng)的根目錄 private void browseToRoot() { browseTo(new File("/")); } //返回上一級(jí)目錄 private void upOneLevel() { if(this.currentDirectory.getParent() != null) this.browseTo(this.currentDirectory.getParentFile()); } //瀏覽指定的目錄,如果是文件則進(jìn)行打開(kāi)操作 private void browseTo(final File file) { this.setTitle(file.getAbsolutePath()); if (file.isDirectory()) { this.currentDirectory = file; fill(file.listFiles()); } else { fileOptMenu(file); } } //打開(kāi)指定文件 protected void openFile(File aFile) { Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); File file = new File(aFile.getAbsolutePath()); // 取得文件名 String fileName = file.getName(); // 根據(jù)不同的文件類(lèi)型來(lái)打開(kāi)文件 if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage))) { intent.setDataAndType(Uri.fromFile(file), "image/*"); } else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio))) { intent.setDataAndType(Uri.fromFile(file), "audio/*"); } else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo))) { intent.setDataAndType(Uri.fromFile(file), "video/*"); } startActivity(intent); } //這里可以理解為設(shè)置ListActivity的源 private void fill(File[] files) { //清空列表 this.directoryEntries.clear(); //添加一個(gè)當(dāng)前目錄的選項(xiàng) this.directoryEntries.add(new IconifiedText(getString(R.string.current_dir), getResources().getDrawable(R.drawable.folder))); //如果不是根目錄則添加上一級(jí)目錄項(xiàng) if (this.currentDirectory.getParent() != null) this.directoryEntries.add(new IconifiedText(getString(R.string.up_one_level), getResources().getDrawable(R.drawable.uponelevel))); Drawable currentIcon = null; for (File currentFile : files) { //判斷是一個(gè)文件夾還是一個(gè)文件 if (currentFile.isDirectory()) { currentIcon = getResources().getDrawable(R.drawable.folder); } else { //取得文件名 String fileName = currentFile.getName(); //根據(jù)文件名來(lái)判斷文件類(lèi)型,設(shè)置不同的圖標(biāo) if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage))) { currentIcon = getResources().getDrawable(R.drawable.image); } else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingWebText))) { currentIcon = getResources().getDrawable(R.drawable.webtext); } else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingPackage))) { currentIcon = getResources().getDrawable(R.drawable.packed); } else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio))) { currentIcon = getResources().getDrawable(R.drawable.audio); } else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo))) { currentIcon = getResources().getDrawable(R.drawable.video); } else { currentIcon = getResources().getDrawable(R.drawable.text); } } //確保只顯示文件名、不顯示路徑如:/sdcard/111.txt就只是顯示111.txt int currentPathStringLenght = this.currentDirectory.getAbsolutePath().length(); this.directoryEntries.add(new IconifiedText(currentFile.getAbsolutePath().substring(currentPathStringLenght), currentIcon)); } Collections.sort(this.directoryEntries); IconifiedTextListAdapter itla = new IconifiedTextListAdapter(this); //將表設(shè)置到ListAdapter中 itla.setListItems(this.directoryEntries); //為L(zhǎng)istActivity添加一個(gè)ListAdapter this.setListAdapter(itla); } protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); // 取得選中的一項(xiàng)的文件名 String selectedFileString = this.directoryEntries.get(position).getText(); if (selectedFileString.equals(getString(R.string.current_dir))) { //如果選中的是刷新 this.browseTo(this.currentDirectory); } else if (selectedFileString.equals(getString(R.string.up_one_level))) { //返回上一級(jí)目錄 this.upOneLevel(); } else { File clickedFile = null; clickedFile = new File(this.currentDirectory.getAbsolutePath()+ this.directoryEntries.get(position).getText()); if(clickedFile != null) this.browseTo(clickedFile); } } //通過(guò)文件名判斷是什么類(lèi)型的文件 private boolean checkEndsWithInStringArray(String checkItsEnd, String[] fileEndings) { for(String aEnd : fileEndings) { if(checkItsEnd.endsWith(aEnd)) return true; } return false; } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, 0, 0, "新建目錄").setIcon(R.drawable.addfolderr); menu.add(0, 1, 0, "刪除目錄").setIcon(R.drawable.delete); menu.add(0, 2, 0, "粘貼文件").setIcon(R.drawable.paste); menu.add(0, 3, 0, "根目錄").setIcon(R.drawable.goroot); menu.add(0, 4, 0, "上一級(jí)").setIcon(R.drawable.uponelevel); return true; } public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case 0: Mynew(); break; case 1: //注意:刪除目錄,謹(jǐn)慎操作,該例子提供了 //deleteFile(刪除文件)和deleteFolder(刪除整個(gè)目錄) MyDelete(); break; case 2: MyPaste(); break; case 3: this.browseToRoot(); break; case 4: this.upOneLevel(); break; } return false; } @Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); } //粘貼操作 public void MyPaste() { if ( myTmpFile == null ) { Builder builder = new Builder(FileManager.this); builder.setTitle("提示"); builder.setMessage("沒(méi)有復(fù)制或剪切操作"); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); } else { if ( myTmpOpt == 0 )//復(fù)制操作 { if(new File(GetCurDirectory()+"/"+myTmpFile.getName()).exists()) { Builder builder = new Builder(FileManager.this); builder.setTitle("粘貼提示"); builder.setMessage("該目錄有相同的文件,是否需要覆蓋?"); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { copyFile(myTmpFile,new File(GetCurDirectory()+"/"+myTmpFile.getName())); browseTo(new File(GetCurDirectory())); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); } else { copyFile(myTmpFile,new File(GetCurDirectory()+"/"+myTmpFile.getName())); browseTo(new File(GetCurDirectory())); } } else if(myTmpOpt == 1)//粘貼操作 { if(new File(GetCurDirectory()+"/"+myTmpFile.getName()).exists()) { Builder builder = new Builder(FileManager.this); builder.setTitle("粘貼提示"); builder.setMessage("該目錄有相同的文件,是否需要覆蓋?"); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { moveFile(myTmpFile.getAbsolutePath(),GetCurDirectory()+"/"+myTmpFile.getName()); browseTo(new File(GetCurDirectory())); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); } else { moveFile(myTmpFile.getAbsolutePath(),GetCurDirectory()+"/"+myTmpFile.getName()); browseTo(new File(GetCurDirectory())); } } } } //刪除整個(gè)文件夾 public void MyDelete() { //取得當(dāng)前目錄 File tmp=new File(this.currentDirectory.getAbsolutePath()); //跳到上一級(jí)目錄 this.upOneLevel(); //刪除取得的目錄 if ( deleteFolder(tmp) ) { Builder builder = new Builder(FileManager.this); builder.setTitle("提示"); builder.setMessage("刪除成功"); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); } else { Builder builder = new Builder(FileManager.this); builder.setTitle("提示"); builder.setMessage("刪除失敗"); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); } this.browseTo(this.currentDirectory); } //新建文件夾 public void Mynew() { final LayoutInflater factory = LayoutInflater.from(FileManager.this); final View dialogview = factory.inflate(R.layout.dialog, null); //設(shè)置TextView ((TextView) dialogview.findViewById(R.id.TextView_PROM)).setText("請(qǐng)輸入新建文件夾的名稱(chēng)!"); //設(shè)置EditText ((EditText) dialogview.findViewById(R.id.EditText_PROM)).setText("文件夾名稱(chēng)..."); Builder builder = new Builder(FileManager.this); builder.setTitle("新建文件夾");
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -