`
切切歆语
  • 浏览: 30175 次
  • 性别: Icon_minigender_1
  • 来自: 泸州市
社区版块
存档分类
最新评论

Android根据文件路径加载指定文件

阅读更多

Android根据指定的文件路径加载指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表。

 如图:

        

代码:

 

public class Util {
	
	/****
	 * 计算文件大小
	 * 
	 * @param length
	 * @return
	 */
	public static String ShowLongFileSzie(Long length) {
		if (length >= 1048576) {
			return (length / 1048576) + "MB";
		} else if (length >= 1024) {
			return (length / 1024) + "KB";
		} else if (length < 1024) {
			return length + "B";
		} else {
			return "0KB";
		}
	}
	
	/***
	 * 
	 * 更具路径得到该路径下的全部图片信息
	 * @return
	 */
	
	public static List<AddFileInfo> getSDPathFrom() {
        // 图片列表
        List<AddFileInfo> imagePathList = new ArrayList<AddFileInfo>();
        // 得到sd卡内image文件夹的路径 
        String filePath = Environment.getExternalStorageDirectory().toString() + File.separator+"BigNoxHD/cache/";
        //得到该路径文件夹下所有的文件
        File fileAll = new File(filePath);
        File[] files = fileAll.listFiles();
        // 将所有的文件存入ArrayList中,并过滤所有图片格式的文件
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            if (checkIsFile(file.getPath())) {
            	String time = new SimpleDateFormat("yyyy-MM-dd")
				.format(new Date(file.lastModified()));
            	AddFileInfo info=new AddFileInfo(file.getName(), Util.ShowLongFileSzie(file.length()), time, file.getAbsolutePath());
                imagePathList.add(info);
            }
        }
        // 返回得到的图片列表
        return imagePathList;
    }

	/****
	 * 验证文件格式
	 * @param fName
	 * @return
	 */
	public static boolean checkIsFile(String fName) {
        boolean isImageFile = false;
        // 获取扩展名
        String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
                fName.length()).toLowerCase();
        if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")|| FileEnd.equals("jpeg") ) {
            isImageFile = true;
        } else {
            isImageFile = false;
        }
        return isImageFile;
    }
	
	/****
	 * 根据文件路径获取图片
	 * 其中w和h你需要转换的大小
	 * @param path 
	 * @param w
	 * @param h
	 * @return
	 */
	public static Bitmap convertToBitmap(String path, int w, int h) {
		BitmapFactory.Options opts = new BitmapFactory.Options();
		// 设置为ture只获取图片大小
		opts.inJustDecodeBounds = true;
		opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
		// 返回为空
		BitmapFactory.decodeFile(path, opts);
		int width = opts.outWidth;
		int height = opts.outHeight;
		float scaleWidth = 0.f, scaleHeight = 0.f;
		if (width > w || height > h) {
			// 缩放
			scaleWidth = ((float) width) / w;
			scaleHeight = ((float) height) / h;
		}
		opts.inJustDecodeBounds = false;
		float scale = Math.max(scaleWidth, scaleHeight);
		opts.inSampleSize = (int)scale;
		WeakReference<Bitmap> weak = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path, opts));
		return Bitmap.createScaledBitmap(weak.get(), w, h, true);
	}
}


MainActivity.java

 

public class MainActivity extends Activity {

	private ListView mListview;
	private List<AddFileInfo> list;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		// TODO Auto-generated method stub
		mListview = (ListView) findViewById(R.id.listview);
		list = Util.getSDPathFrom();
		mListview.setAdapter(new Adapter(MainActivity.this));
	}

	class Adapter extends BaseAdapter {
		private LayoutInflater inflater;
		private Context context;

		public Adapter(Context context) {
			this.context = context;
			this.inflater = LayoutInflater.from(context);
		}

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int position) {
			return list.get(position);
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			if (null == convertView) {
				convertView = inflater.inflate(
						R.layout.item_mytask_file_listview, null);
				holder = new ViewHolder(convertView);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			AddFileInfo info = (AddFileInfo) getItem(position);
			holder.img.setImageBitmap(Util.convertToBitmap(info.getPath(), 99, 99));
			holder.tv_name.setText("文件名称:" + info.getName());
			holder.size.setText("文件大小:" + info.getSize());
			holder.time.setText("文件创建时间:" + info.getTime());
			return convertView;
		}

	}

	class ViewHolder {

		private TextView tv_name;
		private TextView size;
		private TextView time;
		private ImageView img;

		public ViewHolder(View view) {
			img = (ImageView) view.findViewById(R.id.img);
			tv_name = (TextView) view.findViewById(R.id.item_file_name);
			size = (TextView) view.findViewById(R.id.item_file_size);
			time = (TextView) view.findViewById(R.id.item_file_time);
		}
	}
}
不要忘记在AndroidManifest.xml加权限哦!

 

 <!-- SD卡权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

 

 

 

分享到:
评论

相关推荐

    android 根据指定路径获取本地视频列表显示,点击缩略图调用系统播放器进行播放

    在Android开发中,有时我们需要实现一个功能,即根据指定的本地路径展示视频列表,并能点击缩略图播放视频。这个功能对于许多应用,如视频管理器或者个人相册应用,都是至关重要的。以下是对这个标题和描述所涉及...

    Android7.0 自定义文件管理器 获取文件夹路径

    当处理大量文件时,考虑使用分页加载或懒加载策略,避免一次性加载所有文件导致性能下降。 10. 文件过滤和分类: 你可能希望根据文件类型(如图片、音频、视频等)对文件进行分类。可以使用MIME类型或文件扩展名...

    安卓从文件夹读取图片路径并显示图片

    在安卓开发中,读取并显示图片是常见的...对于初学者来说,这是一个很好的起点,有助于理解文件操作、图片加载和用户交互的基本概念。随着经验的增长,你还可以学习更多高级特性,如图片缓存、异步加载以及手势识别等。

    Android内存加载Dex文件示例代码

    本示例将深入探讨如何在Android内存中加载Dex文件,以及如何解决自定义ClassLoader的安全问题。 首先,理解Android的类加载机制至关重要。Android中的类加载主要由ClassLoader完成,它遵循双亲委托模型,即先尝试从...

    android从指定文件夹中显示图片

    在Android平台上,从指定文件夹显示图片涉及到一系列的步骤和技术,包括文件系统操作、图片加载库的使用以及UI设计。以下是对这个主题的详细讲解: 首先,我们需要理解Android的文件系统结构。Android设备通常有两...

    Android查找指定目录下的视频或图片

    要访问文件,你需要使用`java.io.File`类来操作文件路径。`File`类提供了创建、读取、删除文件以及检查文件属性的方法。 2. **存储权限**: 从Android 6.0(API级别23)开始,应用需要在运行时请求存储权限。你...

    android 动态加载class

    DexClassLoader 是Android系统提供的用于加载 dex 文件的类加载器,它继承自 BaseDexClassLoader,并且提供了构造函数,接受四个参数:基础类加载器、优化过的Dex文件路径、原始的类路径以及应用的类加载器搜索路径...

    Android WebView加载网页以及本地图片缓存问题

    确保文件路径正确,例如: ```java String sdCardPath = Environment.getExternalStorageDirectory().getPath(); webView.loadUrl("file://" + sdCardPath + "/path/to/your/file.html"); ``` 3. HTML中引用SD卡图片...

    android动态加载dex

    Android系统提供了System.loadLibrary()方法来加载.so文件,这些文件通常放在项目的jniLibs目录下,根据不同的CPU架构(armeabi, armeabi-v7a, x86等)放置相应的版本。 为了实现动态加载dex和so库,开发者需要关注...

    Android-使用Glide在Android中加载SVG

    这里以`androidsvg`为例,首先将其添加到项目的build.gradle文件中: ```groovy dependencies { implementation 'com.caverock:androidsvg:1.3.3' } ``` 然后,我们需要创建一个自定义的Glide模块,以便于处理SVG...

    Android so加载过程详解

    在深入探讨Android中so(共享对象)文件加载过程之前,需要了解ELF(Executable and Linkable Format)文件格式。ELF是一种用于二进制文件、目标代码和可执行文件的标准文件格式,它描述了计算机中程序的结构。在...

    Android利用.c文件生成So库

    在`src/main/cpp`目录下创建`CMakeLists.txt`文件,指定编译规则: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library( # Sets the name of the library. native-lib # Sets the library as a ...

    Android studio手动创建并生成dex文件源码

    你需要创建一个 DexClassLoader 实例,指定原生库路径、优化后的Dex文件路径、基类路径和父加载器,然后通过它来加载和实例化类。 6. **注意问题与优化**:随着应用的增长,单个Dex文件可能会超过64K方法限制,这时...

    android查找指定目录下的视频或图片

    在获取到媒体文件路径后,你可以展示在ListView、RecyclerView或其他视图组件中,供用户选择。同时,需要注意处理可能的空指针异常和权限问题。为了实现良好的用户体验,还可以考虑使用异步任务或者LiveData来加载...

    android项目中如何加载已有so库

    path "src/main/cpp/CMakeLists.txt" // 指定CMakeLists.txt文件路径 } } } ``` 步骤二:创建CMakeLists.txt 在指定的路径下创建CMakeLists.txt文件,用于配置编译过程。例如: ```cmake cmake_minimum_required...

    android文件选择器

    这通常通过实现一个接口或者设置一个监听器来实现,将选定的文件路径返回给主Activity。 7. **代码组织**:良好的代码结构和模块化设计是项目可维护性的关键。文件选择器的代码可能分为几个部分,如:PopupWindow的...

    DexClassLoader自定义加载Assets目录下的dex、jar文件

    这里,`loadClass()`方法用于加载指定的类,`newInstance()`则创建该类的一个实例。 值得注意的是,当从Assets加载.dex或.jar文件时,需要先将它们复制到应用的内部存储或外部存储,因为ClassLoader无法直接访问...

    Android文件资源管理项目

    只需创建一个Intent,设置ACTION_SEND,附上文件路径,然后启动Activity即可。 9. **性能优化** 考虑到文件操作可能涉及大量数据,项目需要关注性能优化。例如,使用异步加载避免UI阻塞,使用缓存减少重复文件操作...

    Android Excel文件写入和读取

    - 保存文件:最后使用`FileOutputStream`将工作簿对象写入到指定的文件路径。 3. **读取Excel文件**: - 打开文件:使用`XSSFWorkbook`的静态方法`openInputStream`打开一个Excel文件。 - 获取工作表:根据索引...

Global site tag (gtag.js) - Google Analytics