EX05_15.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:8k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex05_15;
  2. /* import相关class */
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import android.app.AlertDialog;
  7. import android.app.ListActivity;
  8. import android.content.DialogInterface;
  9. import android.content.Intent;
  10. import android.content.DialogInterface.OnClickListener;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.view.LayoutInflater;
  14. import android.view.View;
  15. import android.widget.EditText;
  16. import android.widget.ListView;
  17. import android.widget.TextView;
  18. public class EX05_15 extends ListActivity
  19. {
  20.   /* 对象声明 
  21.      items:存放显示的名称
  22.      paths:存放文件路径
  23.      rootPath:起始目录
  24.   */
  25.   private List<String> items=null;
  26.   private List<String> paths=null;
  27.   private String rootPath="/";
  28.   private TextView mPath;
  29.   private View myView;
  30.   private EditText myEditText;
  31.   @Override
  32.   protected void onCreate(Bundle icicle)
  33.   {
  34.     super.onCreate(icicle);
  35.     /* 载入main.xml Layout */
  36.     setContentView(R.layout.main);
  37.     /* 初始化mPath,用以显示目前路径 */
  38.     mPath=(TextView)findViewById(R.id.mPath);
  39.     getFileDir(rootPath);
  40.   }
  41.   
  42.   /* 取得文件架构的方法 */
  43.   private void getFileDir(String filePath)
  44.   {
  45.     /* 设置目前所在路径 */
  46.     mPath.setText(filePath);
  47.     items=new ArrayList<String>();
  48.     paths=new ArrayList<String>();
  49.     
  50.     File f=new File(filePath);  
  51.     File[] files=f.listFiles();
  52.     if(!filePath.equals(rootPath))
  53.     {
  54.       /* 第一笔设置为[回到根目录] */
  55.       items.add("b1");
  56.       paths.add(rootPath);
  57.       /* 第二笔设置为[回上层] */
  58.       items.add("b2");
  59.       paths.add(f.getParent());
  60.     }
  61.     /* 将所有文件添加ArrayList中 */
  62.     for(int i=0;i<files.length;i++)
  63.     {
  64.       File file=files[i];
  65.       items.add(file.getName());
  66.       paths.add(file.getPath());
  67.     }
  68.     /* 使用自定义的MyAdapter来将数据传入ListActivity */
  69.     setListAdapter(new MyAdapter(this,items,paths));
  70.   }
  71.   /* 设置ListItem被点击时要做的动作 */
  72.   @Override
  73.   protected void onListItemClick(ListView l,View v,int position,
  74.                                  long id)
  75.   {
  76.     File file = new File(paths.get(position));
  77.     if(file.isDirectory())
  78.     {
  79.       /* 如果是文件夹就再运行getFileDir() */
  80.       getFileDir(paths.get(position));
  81.     }
  82.     else
  83.     {
  84.       /* 如果是文件调用fileHandle() */
  85.       fileHandle(file);
  86.     }
  87.   }
  88.   /* 处理文件的方法 */
  89.   private void fileHandle(final File file){
  90.     /* 点击文件时的OnClickListener */
  91.     OnClickListener listener1=new DialogInterface.OnClickListener()
  92.     {
  93.       public void onClick(DialogInterface dialog,int which)
  94.       {
  95.         if(which==0)
  96.         {
  97.           /* 选择的item为打开文件 */
  98.           openFile(file);
  99.         }
  100.         else if(which==1)
  101.         {
  102.           /* 选择的item为更改档名 */
  103.           LayoutInflater factory=LayoutInflater.from(EX05_15.this);
  104.           /* 初始化myChoiceView,使用rename_alert_dialog为layout */
  105.           myView=factory.inflate(R.layout.rename_alert_dialog,null);
  106.           myEditText=(EditText)myView.findViewById(R.id.mEdit);
  107.           /* 将原始文件名先放入EditText中 */
  108.           myEditText.setText(file.getName());
  109.           /* new一个更改文件名的Dialog的确定按钮的listener */
  110.           OnClickListener listener2=
  111.           new DialogInterface.OnClickListener()
  112.           {
  113.             public void onClick(DialogInterface dialog, int which)
  114.             {
  115.               /* 取得修改后的文件路径 */
  116.               String modName=myEditText.getText().toString();
  117.               final String pFile=file.getParentFile().getPath()+"/";
  118.               final String newPath=pFile+modName;
  119.               /* 判断档名是否已存在 */
  120.               if(new File(newPath).exists())
  121.               {
  122.                 /* 排除修改档名时没修改直接送出的状况 */
  123.                 if(!modName.equals(file.getName()))
  124.                 {
  125.                   /* 跳出Alert警告档名重复,并确认是否修改 */
  126.                   new AlertDialog.Builder(EX05_15.this)
  127.                       .setTitle("注意!")
  128.                       .setMessage("档名已经存在,是否要覆盖?")
  129.                       .setPositiveButton("确定",
  130.                        new DialogInterface.OnClickListener()
  131.                       {
  132.                         public void onClick(DialogInterface dialog,
  133.                                             int which)
  134.                         {
  135.                           /* 档名重复仍然修改会覆改掉已存在的文件 */
  136.                           file.renameTo(new File(newPath));
  137.                           /* 重新产生文件列表的ListView */
  138.                           getFileDir(pFile);
  139.                         }
  140.                       })
  141.                       .setNegativeButton("取消",
  142.                        new DialogInterface.OnClickListener()
  143.                       {
  144.                         public void onClick(DialogInterface dialog,
  145.                                             int which)
  146.                         {
  147.                         }
  148.                       }).show();
  149.                 }
  150.               }
  151.               else
  152.               {
  153.                 /* 档名不存在,直接做修改动作 */
  154.                 file.renameTo(new File(newPath));
  155.                 /* 重新产生文件列表的ListView */
  156.                 getFileDir(pFile);
  157.               }
  158.             }
  159.           };
  160.           /* create更改档名时跳出的Dialog */
  161.           AlertDialog renameDialog=
  162.             new AlertDialog.Builder(EX05_15.this).create();
  163.           renameDialog.setView(myView);
  164.           /* 设置更改档名点击确认后的Listener */
  165.           renameDialog.setButton("确定",listener2);
  166.           renameDialog.setButton2("取消",
  167.           new DialogInterface.OnClickListener()
  168.           {
  169.             public void onClick(DialogInterface dialog, int which)
  170.             {
  171.             }
  172.           });
  173.           renameDialog.show();
  174.         }
  175.         else
  176.         {
  177.           /* 选择的item为删除文件 */
  178.           new AlertDialog.Builder(EX05_15.this).setTitle("注意!")
  179.               .setMessage("确定要删除文件吗?")
  180.               .setPositiveButton("确定",
  181.                new DialogInterface.OnClickListener()
  182.               {
  183.                 public void onClick(DialogInterface dialog,
  184.                                     int which)
  185.                 {          
  186.                   /* 删除文件 */
  187.                   file.delete();
  188.                   getFileDir(file.getParent());
  189.                 }
  190.               })
  191.               .setNegativeButton("取消",
  192.                new DialogInterface.OnClickListener()
  193.               {
  194.                 public void onClick(DialogInterface dialog,
  195.                                     int which)
  196.                 {
  197.                 }
  198.               }).show();
  199.         }
  200.       }
  201.     };
  202.     /* 选择一个文件时,跳出要如何处理文件的ListDialog */
  203.     String[] menu={"打开文件","更改文件名","删除文件"};
  204.     new AlertDialog.Builder(EX05_15.this)
  205.         .setTitle("你要做甚么?")
  206.         .setItems(menu,listener1)
  207.         .setPositiveButton("取消",
  208.          new DialogInterface.OnClickListener()
  209.         {
  210.           public void onClick(DialogInterface dialog, int which)
  211.           {
  212.           }
  213.         })
  214.         .show();
  215.   }
  216.   /* 在手机上打开文件的方法 */
  217.   private void openFile(File f) 
  218.   {
  219.     Intent intent = new Intent();
  220.     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  221.     intent.setAction(android.content.Intent.ACTION_VIEW);
  222.     /* 调用getMIMEType()来取得MimeType */
  223.     String type = getMIMEType(f);
  224.     /* 设置intent的file与MimeType */
  225.     intent.setDataAndType(Uri.fromFile(f),type);
  226.     startActivity(intent); 
  227.   }
  228.   /* 判断文件MimeType的方法 */
  229.   private String getMIMEType(File f) 
  230.   { 
  231.     String type="";
  232.     String fName=f.getName();
  233.     /* 取得扩展名 */
  234.     String end=fName.substring(fName.lastIndexOf(".")+1,
  235.                                fName.length()).toLowerCase(); 
  236.     /* 依附档名的类型决定MimeType */
  237.     if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")
  238.        ||end.equals("xmf")||end.equals("ogg")||end.equals("wav"))
  239.     {
  240.       type = "audio"; 
  241.     }
  242.     else if(end.equals("3gp")||end.equals("mp4"))
  243.     {
  244.       type = "video";
  245.     }
  246.     else if(end.equals("jpg")||end.equals("gif")||end.equals("png")
  247.              ||end.equals("jpeg")||end.equals("bmp"))
  248.     {
  249.       type = "image";
  250.     }
  251.     else
  252.     {
  253.       /* 如果无法直接打开,就跳出软件列表给用户选择 */
  254.       type="*";
  255.     }
  256.     type += "/*"; 
  257.     return type; 
  258.   }
  259. }