简单实现浏览Android SD卡中的文件

----Main.java

public class Main extends Activity {

	private TextView textView;
	private Button button;
	private ListView listView;

	public File currentParentFile;
	public File[] currentFiles;
	public static  String sdcardDir ;
	static {
		try {
			//sd卡的路径
			sdcardDir = Environment.getExternalStorageDirectory().getCanonicalPath();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		textView = (TextView) findViewById(R.id.textView1);
		button = (Button) findViewById(R.id.button1);
		listView = (ListView) findViewById(R.id.listView1);
		File root = new File(sdcardDir);
		if(root.exists()){
			currentParentFile = root;
			currentFiles = root.listFiles();
			updateListView(currentFiles);
		}

		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				if (currentFiles[position].isFile())
					return;
				File[] tmp = currentFiles[position].listFiles();
				if (tmp == null || tmp.length == 0) {
					Toast.makeText(Main.this, "当前路径无效,或没有文件",
							Toast.LENGTH_SHORT).show();
				} else {
					currentParentFile = currentFiles[position];
					currentFiles = tmp;
					updateListView(currentFiles);
				}
			}
		});
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				try {
					if (!currentParentFile.getCanonicalPath().equals(
							sdcardDir)) {
						currentParentFile = currentParentFile.getParentFile();
						currentFiles = currentParentFile.listFiles();
						updateListView(currentFiles);
					}
					else
						return;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
	}

	private void updateListView(File[] files) {
		List<Map<String, Object>> itemps = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < files.length; i++) {
			Map<String, Object> listItem = new HashMap<String, Object>();
			if (files[i].isDirectory())
				listItem.put("icon", R.drawable.folder);
			else
				listItem.put("icon", R.drawable.file);
			listItem.put("name", files[i].getName());
			itemps.add(listItem);
		}

		SimpleAdapter simpleAdapter = new SimpleAdapter(this, itemps,
				R.layout.listitem, new String[] { "icon", "name" }, new int[] {
						R.id.imageView1, R.id.text });
		listView.setAdapter(simpleAdapter);
		try {
			textView.setText("当前路径为:"+currentParentFile.getCanonicalPath());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

布局文件----main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="当前路径:" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="返回上一级目录" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1" >

    </ListView>

</RelativeLayout>

效果:

listview的每一条的布局:

---listitem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="15dp"
        android:layout_toRightOf="@+id/imageView1"
        android:text="TextView" />

</RelativeLayout>

demo运行效果:

时间: 2024-10-24 11:37:15

简单实现浏览Android SD卡中的文件的相关文章

android 往sd卡中写入文件

在调用前需要判断是否有写入权限 Environment类提供了比较丰富的方法 static File getDataDirectory() 获得android data的目录. static File getDownloadCacheDirectory() 获得下载缓存目录. static File getExternalStorageDirectory() 或者外部存储媒体目录. static File getExternalStoragePublicDirectory(String type

Android文件存储往SD卡中写入文件路径出错问题求解。

============问题描述============   因为学习需要  看的老罗的视频  关于数据存储往SD卡写文件的那一部分  几乎完全照办的敲的代码   结果在pad上测试的时候和预想的有区别     本来应该存储到SD卡中的文件结果跑到pad自带内存中去了...   然后我尝试过把路径直接自己手动写  还是一样存到了自带内存中  这到底是为什么啊? 顺带吐槽一下万恶的导师  十一还要我们加班 求大神们指导呀~   国庆节玩的开学哟!!! ============解决方案1======

【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是参考: http://stackoverflow.com/questions/2116260/logging-to-a-file-on-android 去看看: http://code.google.com/p/android-logging-log4j/ [[折腾过程] 1.去: https://

在sd卡中创建文件夹和文件

本文以在sd卡中创建文件和文件夹为例,讲述如何创建文件夹和文件的重点. 1. 路径问题(下面的例子是在Java中测试的,在Android中同样适用) 1.1 如果需要在文件夹中创建文件的文件夹存在,直接创建文件即可. 例如:File file = new File("F:/1.png"); 1.2 如果需要在文件夹中创建文件的文件夹不存在,需要首先创建文件夹. 例如: File file = new File("F:/123/1.png"); 注释:需要首先在F盘创

微信网页中上传文件时“只能选择SD卡中的文件”问题

需求描述:在微信网页中上传文件到我们自己的服务器,使用 input  type=file标准控件: <input type="file" name="upfile" id="upfile" > 问题来了:苹果可以顺利上传图片文件的,安卓下每次选择完图片文件之后会弹出提示"只能选择SD卡中的文件"不能上传图片.手机已经设置默认存储为SD卡. 百度搜了一个下午没有结果,微信公众平台更没有答案shiiiit. 最后在cs

往SD卡中写文件的方法。

1 package com.lixu.writetosd; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.os.Environment; 9 import android.widget.Toast; 10 11 p

对SD卡中的文件与文件夹进行监控

Android系统API提供了FileObserver抽象类(Linux的INotify机制)来监听系统/sdcard中的文件或文件夹,FileObserver类能对sdcard中的文件及文件夹的打开.创建.移动和删除操作进行监控.下面看看代码实现: //设置所要监控的文件或文件夹 mFileObserver = new SDCardFileObserver(Environment.getExternalStorageDirectory().getPath()); //开始监听 mFileObs

转-Android 之 使用File类在SD卡中读取数据文件

如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码:   <!-- 在sd中创建和删除文件的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 向SD卡中的写入权限 --> Java代码:   <uses-permission an

android 解决传送中文名文件到模拟器SD卡中

RT,android adb push命令解决中文名文件,把电脑本地的文件导入到Android模拟器AVD的SD卡中 1.通过adb push命令 PS:windows下不稳定,试了下中文名文件能传过去,但文件名为空,linux下可以.若win下该方法不行,参考第二种方法.字幕数字文件名不必说了,肯定没问题. 通过adb push,则可将文件添加到SD卡中.如果想在push的时候修改文件名称的话,只需要修改push的第二个参数改成完整路径(目录+文件名),如E:/videos/welcom.mp