`
umbrellall1
  • 浏览: 145770 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

第三章:手机的IO操作(删除,改名字,打开)

阅读更多
效果:






main.xml


<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="2px"
android:layout_y="6px"
>
</TextView>

<ListView
android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ListView>

</AbsoluteLayout>














file_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ImageView>
<TextView
android:id="@+id/text"
android:layout_width="220px"
android:layout_height="wrap_content"
>
</TextView>

</LinearLayout>













alert_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<EditText
android:id="@+id/editText"
android:layout_width="138px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="79px"
android:layout_y="116px"
>
</EditText>


</AbsoluteLayout>




package i.o.explorer.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class IOExplorerTest extends ListActivity {
	/**
	 * Items 存放显示的名称
	 * paths 存放文件路径
	 * rootPath 起始目录
	 * */
	private List<String> items=null;
	private List<String> paths=null;
    private String rootPaths="/";
    private TextView mPath;
    private View view;
    private EditText myEditText;
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** 载入main.xml*/
        setContentView(R.layout.main);
        /** 通过id找到TextView组件*/
        mPath=(TextView)findViewById(R.id.text);
        getFileDir(rootPaths);
    }
    /** 取得文件的方法*/
    private void getFileDir(String filePath){
    	/** 设置目前的目录*/
    	mPath.setText(filePath);
    	items=new ArrayList<String>();
    	paths=new ArrayList<String>();
    	File f=new File(filePath);
    	File[] files=f.listFiles();
    	if(!filePath.equals(rootPaths)){
    		/** 回到根目录*/
    		items.add("b1");
    		paths.add(rootPaths);
    		/** 回到上一层*/
    		items.add("b2");
    		paths.add(f.getParent());
    	}
    	if(files!=null){
    		/** 将文件添加到list当中*/
    		for(int i=0;i<files.length;i++){
    			File file=files[i];
    			items.add(file.getName());
    			paths.add(file.getPath());
    		}
    	}
    	setListAdapter(new MyAdapter(this,items,paths));
    }
    /** 被单击时所做的动作*/
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    	File file=new File(paths.get(position));
    	if(file.isDirectory()){
    		/** 如果是文件就调用取得文件的方法*/
    		getFileDir(paths.get(position));
    	}else{
    		/** 否则就运行文件*/
    		fileHandle(file);
    	}
    }
    /** 处理文件的方法*/
    private void fileHandle(final File file){
    	/** 单击文件是的点击事件*/
    	OnClickListener listener1=new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				if(which==0){
					/** 选择的item为打开的文件*/
					openFile(file);
				}else if(which==1){
					/** 为选择的文件改名*/
					LayoutInflater factory=LayoutInflater.from(IOExplorerTest.this);
					/** 初始化对象,使用alert_dialog布局*/
					view=factory.inflate(R.layout.alert_dialog, null);
					/** 通过view找到EditText组件*/
					myEditText=(EditText)view.findViewById(R.id.editText);
					/** 设置EditText内容为点击文件的文件名*/
					myEditText.setText(file.getName());
					/** 实例一个更改文件的Dialog的确定的按钮的点击事件*/
					OnClickListener listener2=new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							/**获得修改后的文件路径*/
							String modName=myEditText.getText().toString();
							final String pFile=file.getParentFile().getPath()+"/";
							final String newPath=pFile+modName;
							/**判断文件名是否已存在*/
							if(new File(newPath).exists()){
								/**判断文件没修改就发送的状况*/
								if(!modName.equals(file.getName())){
									/**设置 AlertDialog的标题,消息,和按钮的点击事件*/
									new AlertDialog.Builder(IOExplorerTest.this)
									.setTitle("注意")
									.setMessage("文件名已经存在!是否覆盖?")
									.setPositiveButton("确定", new DialogInterface.OnClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which) {
											/**覆盖已存在的文件夹*/
											file.renameTo(new File(newPath));
											/**重新获得文件列表*/
											getFileDir(pFile);
										}
									}).setPositiveButton("取消", new DialogInterface.OnClickListener() {
										
										@Override
										public void onClick(DialogInterface dialog, int which) {
											// TODO Auto-generated method stub
											
										}
									}).show();
								}
							}else{
								/**文件名不存在,直接修改文件名*/
								file.renameTo(new File(newPath));
								/**重新获得路径*/
								getFileDir(pFile);
							}
						}
					};
					/**设置弹出的AlertDialog*/
					AlertDialog renameDialog=new AlertDialog.Builder(IOExplorerTest.this).create();
					renameDialog.setView(view);
					/**设置删除的文件事件*/
					renameDialog.setButton("确定", listener2);
					renameDialog.setButton("取消", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							
						}
					});
					renameDialog.show();
				}else{
					/**选择item为删除文件*/
					new AlertDialog.Builder(IOExplorerTest.this).setTitle("注意!")
					.setMessage("确定要删除文件吗?")
					.setPositiveButton("确定", new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							/**删除文件*/
							file.delete();
							getFileDir(file.getParent());
						}
					}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							
						}
					}).show();
					
				}
			}
		};
		/**在手机上打开文件的提示信息*/
    	String[] menu={"打开文件夹","更改文件名","删除文件"};
    	new AlertDialog.Builder(IOExplorerTest.this)
    	.setTitle("你要做什么?")
    	.setItems(menu, listener1)
    	.setPositiveButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				
			}
		}).show();
    }
    /** 在手机上打开文件的方法*/
    private void openFile(File f){
		Intent intent=new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(android.content.Intent.ACTION_VIEW);
		/** 调用getMIMEType()的方法取得文件类型*/
		String type=getMIMEType(f);
		/** 设置intent的file与MimeType*/
		intent.setDataAndType(Uri.fromFile(f), type);
		startActivity(intent);
	}
    /** 判断文件类型的方法*/
    private String getMIMEType(File f){
    	String type="";
    	String fName=f.getName();
    	/** 取得扩展名*/
    	String end=fName.substring(fName.lastIndexOf(".")+1,fName.length()).toLowerCase();
    	
    	if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||end.equals("xmf")||end.equals("ogg")||end.equals("wav")){
    		type="audio";
    	}else if(end.equals("3gp")||end.equals("mp4")){
    		type="video";
    	}else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||end.equals("jpeg")||end.equals("bmp")){
    		type="image";
    	}else{
    		type="*";
    	}
    	type+="/*";
    	return type;
    }
}




package i.o.explorer.test;

import java.io.File;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {
	private LayoutInflater mInflater;
	/**
	 * mIcon1回到根目录的图片
	 * mIcon2回到上一级图片
	 * mIcon3文件夹图片
	 * mIcon4文件图片
	 * */
	private Bitmap mIcon1;
	private Bitmap mIcon2;
	private Bitmap mIcon3;
	private Bitmap mIcon4;
	private List<String> items;
	private List<String> paths;
	
	/**
	 * MyAdapter构造器传入三个参数
	 * */
	public MyAdapter(Context c,List<String> lt,List<String> pa){
		mInflater=LayoutInflater.from(c);
		items=lt;
		paths=pa;
		mIcon1=BitmapFactory.decodeResource(c.getResources(),R.drawable.folder);
		mIcon2=BitmapFactory.decodeResource(c.getResources(),R.drawable.folder);
		mIcon3=BitmapFactory.decodeResource(c.getResources(),R.drawable.folder2);
		mIcon4=BitmapFactory.decodeResource(c.getResources(),R.drawable.text);
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return items.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return items.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) {
		ViewHolder holder;
		if(convertView==null){
			/**自定义layout作为loyout*/
			convertView=mInflater.inflate(R.layout.file_row, null);
			holder=new ViewHolder();
			holder.text=(TextView) convertView.findViewById(R.id.text);
			holder.icon=(ImageView) convertView.findViewById(R.id.icon);
			convertView.setTag(holder);
		}else{
			holder=(ViewHolder)convertView.getTag();
		}
		File f=new File(paths.get(position).toString());
		if(items.get(position).toString().equals("b1")){
			/**返回根目录*/
			holder.text.setText("Back to..");
			holder.icon.setImageBitmap(mIcon1);
		}else if(items.get(position).toString().equals("b2")){
			/**返回上一级*/
			holder.text.setText("Back to..");
			holder.icon.setImageBitmap(mIcon2);
		}else{
			holder.text.setText(f.getName());
			if(f.isDirectory()){
				/**设置文件或文件夹的图标*/
				holder.icon.setImageBitmap(mIcon3);
			}else{
				holder.icon.setImageBitmap(mIcon4);
			}
		}
		return convertView;
	}
	private class ViewHolder{
		TextView text;
		ImageView icon;
	}
}






  • 大小: 22.8 KB
  • 大小: 23.7 KB
分享到:
评论

相关推荐

    Draw.io 又名 diagrams

    它内置了相当丰富的绘图资源,包括各类形状、图标、连接器、模板,能满足绝大大多数的绘图需求,还可以导入第三方图标资源满足更多需求,完全可以取代微软 Visio 等流程图软件。 本站已制作成绿色免安装版 下载解压...

    寒江独钓-Windows内核安全编程(高清完整版).part4

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    c#写的一个file文件的操作类

    在C#编程语言中,File类是System.IO命名空间下的一个关键类,用于处理文件的各种操作,如创建、打开、读取、写入、删除等。这个“c#写的一个file文件的操作类”可能是一个自定义的类,扩展了C#标准库中File类的功能...

    Windows内核安全与驱动开发光盘源码

    第1章 内核上机指导 2 1.1 下载和使用WDK 2 1.1.1 下载并安装WDK 2 1.1.2 编写第一个C文件 4 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机...

    Windows内核安全驱动开发(随书光盘)

    第1章 内核上机指导 2 1.1 下载和使用WDK 2 1.1.1 下载并安装WDK 2 1.1.2 编写第一个C文件 4 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机...

    寒江独钓-Windows内核安全编程(高清完整版).part7

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    寒江独钓-Windows内核安全编程(高清完整版).part1

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    寒江独钓-Windows内核安全编程(高清完整版).part6

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    寒江独钓-Windows内核安全编程(高清完整版).part5

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    寒江独钓-Windows内核安全编程(高清完整版).part3

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    寒江独钓-Windows内核安全编程(高清完整版).part2

    第1章 内核上机指导 1 1.1 下载和使用WDK 2 1.1.1 下载安装WDK 2 1.1.2 编写第一个C文件 3 1.1.3 编译一个工程 5 1.2 安装与运行 6 1.2.1 下载一个安装工具 6 1.2.2 运行与查看输出信息 7 1.2.3 在虚拟机中运行 9 ...

    windows实用dos命令大全

    (三)RD——删除子目录命令  1.功能:从指定的磁盘删除了目录。  2.类型:内部命令  3.格式:RD[盘符:][路径名][子目录名]  4.使用说明:  (1)子目录在删除前必须是空的,也就是说需要先进入该子目录,...

    常用C#API大全

    本文档旨在为C#开发者提供一个全面的Windows API函数指南,重点介绍了网络函数、消息函数及文件处理函数三大类别的核心功能与应用场景。通过这些API,开发者能够更加高效地利用操作系统资源,实现复杂的业务逻辑。 ...

    python简明教程

    - 支持添加、删除元素等操作。 - **元组**: - 不可变序列; - 一旦创建无法修改。 - **元组与打印语句**: - 使用元组可以轻松地输出多个值; - 示例:`print(("hello", 123))`。 - **字典**: - 键值对的...

    精易模块[源码] V5.15

    6、新增“类_任务栏”可以显示隐藏任何第三方窗口图标,相当于易中的(不在任务栏显示),带【实例】演示。 7、新增“类_线程池1”中的“等待”方法。 8、修复“编码_Utf8到Ansi“分配内存失败BUG,感谢易友【仁鹰】...

    goodhabits:简约习惯追踪器

    7. 可能的API集成:虽然数据不存储在服务器,但应用可能通过API与其他服务交互,例如,提供数据导出功能,或者集成第三方统计分析工具。 8. 版本控制:应用的开发可能使用Git进行版本控制,"master"分支即为默认的...

Global site tag (gtag.js) - Google Analytics