• 根据路径遍历该路径下的文件夹和文件并以列表形式显示出来、文件(夹)的复制


     1   /**根据给定的一个文件夹路径字符串遍历出这个文
     2      * 件夹中包含的文件名称并配置到ListView列表中*/
     3     private void initFileListInfo(String filePath){
     4         isAddBackUp = false;
     5         mCurrentFilePath = filePath;
     6         //显示当前的路径
     7         mPath.setText(filePath);
     8         mFileName = new ArrayList<String>();
     9         mFilePaths = new ArrayList<String>();
    10         File mFile = new File(filePath);
    11         //遍历出该文件夹路径下的所有文件/文件夹
    12         File[] mFiles = mFile.listFiles();
    13         //只要当前路径不是手机根目录或者是sd卡根目录则显示“返回根目录”和“返回上一级”
    14         if(menuPosition == 1&&!mCurrentFilePath.equals(mRootPath)){
    15             initAddBackUp(filePath,mRootPath);
    16         }else if(menuPosition == 2&&!mCurrentFilePath.equals(mSDCard)){
    17             initAddBackUp(filePath,mSDCard);
    18         }
    19         
    20         /*将所有文件信息添加到集合中*/
    21         for(File mCurrentFile:mFiles){
    22             mFileName.add(mCurrentFile.getName());
    23             mFilePaths.add(mCurrentFile.getPath());
    24         }
    25         
    26         /*适配数据*/ setListAdapter设置listView的适配器,要集成自ListActivity
    27         setListAdapter(new FileAdapter(MainActivity.this,mFileName,mFilePaths));
    28     }

     接着是列表的适配器(继承自BaseAdapter),要复写getCount()、getItem()、getItemId()以及getView()函数。

        //自定义Adapter内部类
        class FileAdapter extends BaseAdapter{
            //返回键,各种格式的文件的图标
            private Bitmap mBackRoot;
            private Bitmap mBackUp;
            private Bitmap mImage;
            private Bitmap mAudio;
            private Bitmap mRar;
            private Bitmap mVideo;
            private Bitmap mFolder;
            private Bitmap mApk;
            private Bitmap mOthers;
            private Bitmap mTxt;
            private Bitmap mWeb;
            
            private Context mContext;
            //文件名列表
            private List<String> mFileNameList;
            //文件对应的路径列表
            private List<String> mFilePathList;
            
            public FileAdapter(Context context,List<String> fileName,List<String> filePath){
                mContext = context;
                mFileNameList = fileName;
                mFilePathList = filePath;
                //初始化图片资源
                //返回到根目录
                mBackRoot = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.back_to_root);
                //返回到上一级目录
                mBackUp = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.back_to_up);
                //图片文件对应的icon
                mImage = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.image);
                //音频文件对应的icon
                mAudio = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.audio);
                //视频文件对应的icon
                mVideo = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.video);
                //可执行文件对应的icon
                mApk = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.apk);
                //文本文档对应的icon
                mTxt = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.txt);
                //其他类型文件对应的icon
                mOthers = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.others);
                //文件夹对应的icon
                mFolder = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.folder);
                //zip文件对应的icon
                mRar = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.zip_icon);
                //网页文件对应的icon
                mWeb = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.web_browser);
            }
            //获得文件的总数
            public int getCount() {
                return mFilePathList.size();
            }
            //获得当前位置对应的文件名
            public Object getItem(int position) {
                return mFileNameList.get(position);
            }
            //获得当前的位置
            public long getItemId(int position) {
                return position;
            }
            //获得视图
            public View getView(int position, View convertView, ViewGroup viewgroup) {
                ViewHolder viewHolder = null;
                if (convertView == null) {
                    viewHolder = new ViewHolder();
                    LayoutInflater mLI = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    //初始化列表元素界面
                    convertView = mLI.inflate(R.layout.list_child, null);
                    //获取列表布局界面元素
                    viewHolder.mIV = (ImageView)convertView.findViewById(R.id.image_list_childs);
                    viewHolder.mTV = (TextView)convertView.findViewById(R.id.text_list_childs);
                    //将每一行的元素集合设置成标签
                    convertView.setTag(viewHolder);
                } else {
                    //获取视图标签
                    viewHolder = (ViewHolder) convertView.getTag();
                }
                File mFile = new File(mFilePathList.get(position).toString());
                //如果
                if(mFileNameList.get(position).toString().equals("BacktoRoot")){
                    //添加返回根目录的按钮
                    viewHolder.mIV.setImageBitmap(mBackRoot);
                    viewHolder.mTV.setText("返回根目录");
                }else if(mFileNameList.get(position).toString().equals("BacktoUp")){
                    //添加返回上一级菜单的按钮
                    viewHolder.mIV.setImageBitmap(mBackUp);
                    viewHolder.mTV.setText("返回上一级");
                }else if(mFileNameList.get(position).toString().equals("BacktoSearchBefore")){
                    //添加返回搜索之前目录的按钮
                    viewHolder.mIV.setImageBitmap(mBackRoot);
                    viewHolder.mTV.setText("返回搜索之前目录");
                }else{
                    String fileName = mFile.getName();
                    viewHolder.mTV.setText(fileName);
                    if(mFile.isDirectory()){
                        viewHolder.mIV.setImageBitmap(mFolder);
                    }else{
                        String fileEnds = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()).toLowerCase();//取出文件后缀名并转成小写
                        if(fileEnds.equals("m4a")||fileEnds.equals("mp3")||fileEnds.equals("mid")||fileEnds.equals("xmf")||fileEnds.equals("ogg")||fileEnds.equals("wav")){
                            viewHolder.mIV.setImageBitmap(mVideo);
                        }else if(fileEnds.equals("3gp")||fileEnds.equals("mp4")){
                            viewHolder.mIV.setImageBitmap(mAudio);
                        }else if(fileEnds.equals("jpg")||fileEnds.equals("gif")||fileEnds.equals("png")||fileEnds.equals("jpeg")||fileEnds.equals("bmp")){
                            viewHolder.mIV.setImageBitmap(mImage);
                        }else if(fileEnds.equals("apk")){
                            viewHolder.mIV.setImageBitmap(mApk);
                        }else if(fileEnds.equals("txt")){
                            viewHolder.mIV.setImageBitmap(mTxt);
                        }else if(fileEnds.equals("zip")||fileEnds.equals("rar")){
                            viewHolder.mIV.setImageBitmap(mRar);
                        }else if(fileEnds.equals("html")||fileEnds.equals("htm")||fileEnds.equals("mht")){
                            viewHolder.mIV.setImageBitmap(mWeb);
                        }else {
                            viewHolder.mIV.setImageBitmap(mOthers);
                        }
                    }                
                }
                return convertView;
            }
            //用于存储列表每一行元素的图片和文本
            class ViewHolder {
                ImageView mIV;
                TextView mTV;
            }
        }

     文件(夹)的复制(用FileInputStream的read()方法逐个字节读入,同时用FileOutputStream逐个字节写入文件)。

      private int i;
        FileInputStream fis;
        FileOutputStream fos;
        //复制文件
        private void copyFile(String oldFile,String newFile){
            try {
                fis =  new FileInputStream(oldFile);
                fos = new FileOutputStream(newFile);
                do{
                    //逐个byte读取文件,并写入另一个文件中
                    if((i = fis.read()) != -1){
                        fos.write(i);
                    }
                }while(i != -1);
                //关闭输入文件流
                if(fis != null){
                    fis.close();
                }
                //关闭输出文件流
                if(fos != null){
                    fos.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    CodeForces 916A Jamie and Alarm Snooze (水题)
    BZOJ 2440 [中山市选2011]完全平方数 (二分 + 莫比乌斯函数)
    BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
    HDU 1695 GCD (莫比乌斯反演)
    如何分析解决Android ANR
    Android网络编程系列 一 TCP/IP协议族之链路层
    Android网络编程系列 一 TCP/IP协议族之网际层
    Android网络编程系列 一 TCP/IP协议族之传输层
    Android网络编程系列 一 TCP/IP协议族
    Android网络编程系列 一 JavaSecurity之JSSE(SSL/TLS)
  • 原文地址:https://www.cnblogs.com/Jackie-zhang/p/5277518.html
Copyright © 2020-2023  润新知