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加权限哦!
相关推荐
在Android开发中,有时我们需要实现一个功能,即根据指定的本地路径展示视频列表,并能点击缩略图播放视频。这个功能对于许多应用,如视频管理器或者个人相册应用,都是至关重要的。以下是对这个标题和描述所涉及...
当处理大量文件时,考虑使用分页加载或懒加载策略,避免一次性加载所有文件导致性能下降。 10. 文件过滤和分类: 你可能希望根据文件类型(如图片、音频、视频等)对文件进行分类。可以使用MIME类型或文件扩展名...
在安卓开发中,读取并显示图片是常见的...对于初学者来说,这是一个很好的起点,有助于理解文件操作、图片加载和用户交互的基本概念。随着经验的增长,你还可以学习更多高级特性,如图片缓存、异步加载以及手势识别等。
本示例将深入探讨如何在Android内存中加载Dex文件,以及如何解决自定义ClassLoader的安全问题。 首先,理解Android的类加载机制至关重要。Android中的类加载主要由ClassLoader完成,它遵循双亲委托模型,即先尝试从...
在Android平台上,从指定文件夹显示图片涉及到一系列的步骤和技术,包括文件系统操作、图片加载库的使用以及UI设计。以下是对这个主题的详细讲解: 首先,我们需要理解Android的文件系统结构。Android设备通常有两...
要访问文件,你需要使用`java.io.File`类来操作文件路径。`File`类提供了创建、读取、删除文件以及检查文件属性的方法。 2. **存储权限**: 从Android 6.0(API级别23)开始,应用需要在运行时请求存储权限。你...
DexClassLoader 是Android系统提供的用于加载 dex 文件的类加载器,它继承自 BaseDexClassLoader,并且提供了构造函数,接受四个参数:基础类加载器、优化过的Dex文件路径、原始的类路径以及应用的类加载器搜索路径...
确保文件路径正确,例如: ```java String sdCardPath = Environment.getExternalStorageDirectory().getPath(); webView.loadUrl("file://" + sdCardPath + "/path/to/your/file.html"); ``` 3. HTML中引用SD卡图片...
Android系统提供了System.loadLibrary()方法来加载.so文件,这些文件通常放在项目的jniLibs目录下,根据不同的CPU架构(armeabi, armeabi-v7a, x86等)放置相应的版本。 为了实现动态加载dex和so库,开发者需要关注...
这里以`androidsvg`为例,首先将其添加到项目的build.gradle文件中: ```groovy dependencies { implementation 'com.caverock:androidsvg:1.3.3' } ``` 然后,我们需要创建一个自定义的Glide模块,以便于处理SVG...
在深入探讨Android中so(共享对象)文件加载过程之前,需要了解ELF(Executable and Linkable Format)文件格式。ELF是一种用于二进制文件、目标代码和可执行文件的标准文件格式,它描述了计算机中程序的结构。在...
在`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 ...
你需要创建一个 DexClassLoader 实例,指定原生库路径、优化后的Dex文件路径、基类路径和父加载器,然后通过它来加载和实例化类。 6. **注意问题与优化**:随着应用的增长,单个Dex文件可能会超过64K方法限制,这时...
在获取到媒体文件路径后,你可以展示在ListView、RecyclerView或其他视图组件中,供用户选择。同时,需要注意处理可能的空指针异常和权限问题。为了实现良好的用户体验,还可以考虑使用异步任务或者LiveData来加载...
path "src/main/cpp/CMakeLists.txt" // 指定CMakeLists.txt文件路径 } } } ``` 步骤二:创建CMakeLists.txt 在指定的路径下创建CMakeLists.txt文件,用于配置编译过程。例如: ```cmake cmake_minimum_required...
这通常通过实现一个接口或者设置一个监听器来实现,将选定的文件路径返回给主Activity。 7. **代码组织**:良好的代码结构和模块化设计是项目可维护性的关键。文件选择器的代码可能分为几个部分,如:PopupWindow的...
这里,`loadClass()`方法用于加载指定的类,`newInstance()`则创建该类的一个实例。 值得注意的是,当从Assets加载.dex或.jar文件时,需要先将它们复制到应用的内部存储或外部存储,因为ClassLoader无法直接访问...
只需创建一个Intent,设置ACTION_SEND,附上文件路径,然后启动Activity即可。 9. **性能优化** 考虑到文件操作可能涉及大量数据,项目需要关注性能优化。例如,使用异步加载避免UI阻塞,使用缓存减少重复文件操作...
- 保存文件:最后使用`FileOutputStream`将工作簿对象写入到指定的文件路径。 3. **读取Excel文件**: - 打开文件:使用`XSSFWorkbook`的静态方法`openInputStream`打开一个Excel文件。 - 获取工作表:根据索引...