数据存储——四种存储方式——存储卡的文件操作——在存储卡上读写图片文件
======================================================================
第一个布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" > <ImageView android:id="@+id/iv_content" android:layout_width="match_parent" android:layout_height="250dp" android:scaleType="fitCenter" /> <Button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="把资源图片保存到存储卡" android:textColor="@color/black" android:textSize="17sp" /> <TextView android:id="@+id/tv_path" android:layout_width="wrap_content" android:layout_height="match_parent" android:textColor="@color/black" android:textSize="17sp" /> </LinearLayout>
第一个布局代码:
package com.example.myapplication; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageView iv_content; private TextView tv_path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_content = findViewById(R.id.iv_content); iv_content.setImageResource(R.drawable.huawei); // 设置图像视图的图片资源 tv_path = findViewById(R.id.tv_path); findViewById(R.id.btn_save).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.btn_save) { // 获取当前App的私有下载目录 String path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + "/"; // 从指定的资源文件中获取位图对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.huawei); String file_path = path + DateUtil.getNowDateTime("") + ".jpeg"; FileUtil.saveImage(file_path, bitmap); // 把位图对象保存为图片文件 tv_path.setText("图片文件的保存路径为:\n" + file_path); ToastUtil.show(this, "图片已写入存储卡文件"); } startActivity(new Intent(this,MainActivity2.class)); } }
第二个布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" > <Button android:id="@+id/btn_delete" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="删除所有图片文件" android:textColor="@color/black" android:textSize="17sp" /> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/black" android:textSize="17sp" /> <ImageView android:id="@+id/iv_content" android:layout_width="match_parent" android:layout_height="250dp" android:scaleType="fitCenter" /> </LinearLayout>
第二个布局代码:
package com.example.myapplication; import android.graphics.Bitmap; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import java.io.File; import java.util.ArrayList; import java.util.List; public class MainActivity2 extends AppCompatActivity implements View.OnClickListener { private final static String TAG = "ImageReadActivity"; private TextView tv_content; private ImageView iv_content; private String mPath; // 私有目录路径 private List<File> mFilelist = new ArrayList<File>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); tv_content = findViewById(R.id.tv_content); iv_content = findViewById(R.id.iv_content); findViewById(R.id.btn_delete).setOnClickListener(this); // 获取当前App的私有下载目录 mPath = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString() + "/"; showFileContent(); // 显示最新的图片文件内容 } // 显示最新的图片文件内容 private void showFileContent() { // 获得指定目录下面的所有图片文件 mFilelist = FileUtil.getFileList(mPath, new String[]{".jpeg"}); if (mFilelist.size() > 0) { // 打开并显示选中的图片文件内容 String file_path = mFilelist.get(0).getAbsolutePath(); tv_content.setText("找到最新的图片文件,路径为"+file_path); // 显示存储卡图片文件的第一种方式:直接调用setImageURI方法 //iv_content.setImageURI(Uri.parse(file_path)); // 设置图像视图的路径对象 // 第二种方式:先调用BitmapFactory.decodeFile获得位图,再调用setImageBitmap方法 //Bitmap bitmap = BitmapFactory.decodeFile(file_path); //iv_content.setImageBitmap(bitmap); // 设置图像视图的位图对象 // 第三种方式:先调用FileUtil.openImage获得位图,再调用setImageBitmap方法 Bitmap bitmap = FileUtil.openImage(file_path); iv_content.setImageBitmap(bitmap); // 设置图像视图的位图对象 } else { tv_content.setText("私有目录下未找到任何图片文件"); } } @Override public void onClick(View v) { if (v.getId() == R.id.btn_delete) { for (int i = 0; i < mFilelist.size(); i++) { // 获取该文件的绝对路径字符串 String file_path = mFilelist.get(i).getAbsolutePath(); File f = new File(file_path); if (!f.delete()) { // 删除文件,并判断是否成功删除 Log.d(TAG, "file_path=" + file_path + ", delete failed"); } } ToastUtil.show(this, "已删除私有目录下的所有图片文件"); } } }
==========================================================================================