实现读取某文件夹下txt、图片,并按钮点击上一个下一个文件中的txt,图片

来源:互联网 发布:买股票的软件 编辑:程序博客网 时间:2024/05/01 20:18

忙活许久

实现软件读取某文件下图片、txt文字,显示在 TextView 和 ListView 上

并且 两个按钮点击 功能为 显示下一个文件中的图片、文字,或者上一个的图片、文字

import android.app.Activity;import android.media.MediaScannerConnection;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import static com.example.creationio.TxtScanner.Txt;/** * Created by 允琪 on 2017/5/3. */public class TestActivity extends Activity implements MediaScannerConnection.MediaScannerConnectionClient {    List<Object> listpath;    public String[] allFiles;    public String[] allname;    public static TestActivity mactivity;    public static String SCAN_PATH;    public static final String FILE_TYPE = "image/*";    public static String sdPath = "/sdcard/File/";    public String scanpath2;    public static MediaScannerConnection conn;    private TextView car_number, out_line_content, out_line_time, out_line_place;    private Button btn_submit,btn_next,btn_this;    ImageScanner.Myadapter adapter;    public ListView listView;    public File folder,folder2;    private Handler handler;    private int flag ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.test_layout);        mactivity = this;        car_number = (TextView) findViewById(R.id.car_number);        out_line_content = (TextView) findViewById(R.id.outline_content);        out_line_time = (TextView) findViewById(R.id.outline_time);        out_line_place = (TextView) findViewById(R.id.outline_place);        btn_submit = (Button) findViewById(R.id.btnsubmit);        btn_next = (Button) findViewById(R.id.btnnext);        btn_this = (Button) findViewById(R.id.btnthis);//初始化界面显示第一个文件夹中的图片和文字        listpath = new ArrayList<Object>();        listView = (ListView) this.findViewById(R.id.listView1);        folder = new File(sdPath);        allFiles = folder.list();//此处显示当前地址 sdpath = "/sdcard/File/";这里面的文件夹 我这里File 有1,2,3,4四个文件夹        folder2 = new File(sdPath+allFiles[flag]);        allname  = folder2.list();//此处显示当前地址 上面File 中 1-4 个文件夹中的内容,这里flag为全局index        String address = sdPath + allFiles[flag];        String s1 = TxtScanner.Txt(address).get(0);//从Map get(key = 0)的value//此处调用TxtScanner中Txt方法,获取文件夹下文字并且每一行读到Map一个键值对里        String s2 = TxtScanner.Txt(address).get(1);        String s3 = TxtScanner.Txt(address).get(2);        String s4 = TxtScanner.Txt(address).get(3);        car_number.setText(s1);//几个Text用来显示获取到的文字        out_line_content.setText(s2);        out_line_time.setText(s3);        out_line_place.setText(s4);        for (int i = 0 ;i < allname.length;i++) {            scanpath2 = Environment.getExternalStorageDirectory().toString() + "/File/" + allFiles[flag] + "/" + allname[i];
        //文件File中1,2,3,4文件夹,其中又各有其他文件  
//个人建议在文件问题上多用Log打印和Debug查看地址等,稳!
Log.d("allfile", allFiles[flag]);
        if (scanpath2.contains(".jpg")) {//这里要把图片地址传递给listView了,必须要过滤txt类型文件,不然listView会有一块空白            listpath.add(scanpath2);            SCAN_PATH = Environment.getExternalStorageDirectory().toString() + "/File/" + allFiles[flag] + "/" + allname[i];//交给listpath的就是这些            Log.d("SCAN_PATH", SCAN_PATH);            startScan();            adapter = new ImageScanner.Myadapter(getApplicationContext());            adapter.setdate(listpath);            Log.d("listpath",listpath.toString());            listView.setAdapter(adapter);            adapter.notifyDataSetChanged();        }        }        btn_this.setOnClickListener(new View.OnClickListener() {//其实这是上一个文件夹,不想改了            @Override//这里都和onCreate类似,但有一点要注意 要清listpath,因为是全局变量,所以显示下一个时会捎上上面查看的图片地址            public void onClick(View view) {                listpath.clear();//这里要稳                --flag;                if (flag < 0){                    Toast.makeText(TestActivity.this,"已经是第一个文件",Toast.LENGTH_SHORT).show();//一定要判断,不然会Bug闪退                }else {                    String address = sdPath + allFiles[flag];                    String s1 = TxtScanner.Txt(address).get(0);//从Map get (key = 0)的value                    String s2 = TxtScanner.Txt(address).get(1);                    String s3 = TxtScanner.Txt(address).get(2);                    String s4 = TxtScanner.Txt(address).get(3);                    car_number.setText(s1);                    out_line_content.setText(s2);                    out_line_time.setText(s3);                    out_line_place.setText(s4);                    folder2 = new File(sdPath+allFiles[flag]);                    allname  = folder2.list();                    for (int i = 0 ;i < allname.length;i++) {                        scanpath2 = Environment.getExternalStorageDirectory().toString() + "/File/" + allFiles[flag] + "/" + allname[i];                        Log.d("allfile", allFiles[flag]);                        if (scanpath2.contains(".jpg")) {                            listpath.add(scanpath2);                            SCAN_PATH = Environment.getExternalStorageDirectory().toString() + "/File/" + allFiles[flag] + "/" + allname[i];                            Log.d("SCAN_PATH", SCAN_PATH);                            startScan();                            adapter = new ImageScanner.Myadapter(getApplicationContext());                            adapter.setdate(listpath);                            listView.setAdapter(adapter);                            adapter.notifyDataSetChanged();                        }                    }                }            }        });        btn_next.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                listpath.clear();                ++flag;                if (flag > allFiles.length-1){                    Toast.makeText(TestActivity.this,"已经是最后一个文件",Toast.LENGTH_SHORT).show();                }else {                    String address = sdPath + allFiles[flag];                    String s1 = Txt(address).get(0);//从Map get (key = 0)的value                    String s2 = Txt(address).get(1);                    String s3 = Txt(address).get(2);                    String s4 = Txt(address).get(3);                    car_number.setText(s1);                    out_line_content.setText(s2);                    out_line_time.setText(s3);                    out_line_place.setText(s4);                    folder2 = new File(sdPath+allFiles[flag]);                    allname  = folder2.list();                    for (int i = 0 ;i < allname.length;i++) {                        scanpath2 = Environment.getExternalStorageDirectory().toString() + "/File/" + allFiles[flag] + "/" + allname[i];                        Log.d("allfile", allname[i]);                        if (scanpath2.contains(".jpg")) {                            listpath.add(scanpath2);                            SCAN_PATH = Environment.getExternalStorageDirectory().toString() + "/File/" + allFiles[flag] + "/" + allname[1];                            Log.d("SCAN_PATH", SCAN_PATH);                        }                        startScan();                        adapter = new ImageScanner.Myadapter(getApplicationContext());                        adapter.setdate(listpath);                        Log.d("listpath",listpath.toString());                        listView.setAdapter(adapter);                        adapter.notifyDataSetChanged();                    }                    }                }//                Toast.makeText(TestActivity.this,"当前位于: 文件夹:"+allFiles[flag],Toast.LENGTH_SHORT).show();        });    }    private void startScan() {        Log.d("Connected", "-->>success" + conn);        if (conn != null) {            conn.disconnect();        }        conn = new MediaScannerConnection(this, this);        conn.connect();    }    @Override    public void onMediaScannerConnected() {        conn.scanFile(SCAN_PATH, FILE_TYPE);    }    @Override    public void onScanCompleted(String path, Uri uri) {        try {        } finally {            conn.disconnect();            conn = null;        }    }
ImageScanner类
 
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.MediaScannerConnection;import android.net.Uri;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import java.util.List;import static com.example.creationio.TestActivity.FILE_TYPE;import static com.example.creationio.TestActivity.SCAN_PATH;import static com.example.creationio.TestActivity.conn;/** * Created by 允琪 on 2017/5/5. */public class ImageScanner{    public  static class Myadapter extends BaseAdapter {        private Context context;        private LayoutInflater inflater;        private List<Object> listpath;//没啥好说的,就这个listPath是从Activity传过来的        @SuppressWarnings("unused")        public void setdate(List<Object> path){            this.listpath=path;        }        @SuppressWarnings("static-access")        public Myadapter (Context context){            this.context = context;            inflater = inflater.from(context);        }        @Override        public int getCount(){            return  listpath.size();        }        @Override        public Object getItem(int position){            return listpath.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent){            convertView = null;            convertView = inflater.inflate(R.layout.list_layout,null);            ImageView imageView = (ImageView)convertView.findViewById(R.id.imageView1);            Bitmap bitmap;            String name = listpath.get(position).toString();            if (name.contains("jpg")&&(!name.contains("txt"))) {                Log.d("name", name+"    find .jpg");                bitmap = BitmapFactory.decodeFile(listpath.get(position).toString(), null);                imageView.setImageBitmap(bitmap);            }            else if (name.contains("txt")) {                Log.d("find txt", name);            }            return convertView;        }    }}

TxtScanner类
import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import static com.example.creationio.TestActivity.*;import static com.example.creationio.TestActivity.sdPath;/** * Created by 允琪 on 2017/5/5. */public class TxtScanner  {    public static Map<Integer, String>  Txt(String path) {        //将读出来的一行行数据使用Map存储        String filePath = path+"/outline.txt";//手机上地址        Map<Integer, String> map = new HashMap<Integer, String>();        try {            File file = new File(filePath);            int count = 0;//初始化 key值            if (file.isFile() && file.exists()) {       //文件存在的前提                InputStreamReader isr = new InputStreamReader(new FileInputStream(file),"GBK");                BufferedReader br = new BufferedReader(isr);                String lineTxt = null;                while ((lineTxt = br.readLine()) != null) {     //一行一行                    if (!"".equals(lineTxt)) {                        String reds = lineTxt.split("\\+")[0];      //java 正则表达式                        map.put(count, reds);//依次放到map  0,value0;1,value2                        count++;                    }                }                isr.close();                br.close();            }else {//                Toast.makeText(mactivity,"can not find file",Toast.LENGTH_SHORT).show();//找不到文件情况下            }        } catch (Exception e) {            e.printStackTrace();        }        return map;    }}


写完终于觉得,唉,终于放松了

Test_layout布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                xmlns:app="http://schemas.android.com/apk/res-auto"                xmlns:tools="http://schemas.android.com/tools"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:paddingBottom="@dimen/activity_vertical_margin"                android:paddingLeft="@dimen/activity_horizontal_margin"                android:paddingRight="@dimen/activity_horizontal_margin"                android:paddingTop="@dimen/activity_vertical_margin">    <ListView        android:id="@+id/listView1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/textView11"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_marginTop="25dp"        android:layout_above="@+id/btnnext"        >    </ListView>    <Button        android:text="上传"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/btnsubmit"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true"/>    <Button        android:text="上一条"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/btnthis"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"/>    <Button        android:id="@+id/btnnext"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="下一条"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"/>    <TextView        android:text="违规内容:"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:id="@+id/textView9"        android:layout_below="@+id/textView8"        android:layout_alignLeft="@+id/textView8"        android:layout_alignStart="@+id/textView8"/>    <TextView        android:text="违规时间:"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="9dp"        android:id="@+id/textView10"        android:layout_below="@+id/textView9"        android:layout_alignRight="@+id/textView8"        android:layout_alignEnd="@+id/textView8"/>    <TextView        android:text="违规地点:"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/textView11"        android:layout_marginTop="8dp"        android:layout_below="@+id/textView10"        android:layout_alignLeft="@+id/textView10"        android:layout_alignStart="@+id/textView10"/>    <TextView        android:text="违规内容"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/outline_content"        android:layout_alignBaseline="@+id/textView9"        android:layout_alignBottom="@+id/textView9"        android:layout_alignLeft="@+id/car_number"        android:layout_alignStart="@+id/car_number"/>    <TextView        android:text="违规时间"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/outline_time"        android:layout_alignBaseline="@+id/textView10"        android:layout_alignBottom="@+id/textView10"        android:layout_alignLeft="@+id/outline_content"        android:layout_alignStart="@+id/outline_content"/>    <TextView        android:text="违规地点"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/outline_place"        android:layout_above="@+id/listView1"        android:layout_alignLeft="@+id/outline_time"        android:layout_alignStart="@+id/outline_time"/>    <TextView        android:text="车牌号"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/car_number"        android:layout_alignBaseline="@+id/textView8"        android:layout_alignBottom="@+id/textView8"        android:layout_toLeftOf="@+id/btnsubmit"        android:layout_toStartOf="@+id/btnsubmit"/>    <TextView        android:text=" 车 牌 号 :"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="17dp"        android:id="@+id/textView8"        android:layout_alignParentTop="true"        android:layout_toLeftOf="@+id/btnnext"        android:layout_toStartOf="@+id/btnnext"        android:layout_marginRight="12dp"        android:layout_marginEnd="12dp"/></RelativeLayout>

list_layout 布局

<?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" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#fffffb"        android:orientation="horizontal"        android:weightSum="1">        <ImageView            android:id="@+id/imageView1"            android:layout_gravity="center"            android:layout_height="249dp"            android:layout_width="380dp"/>            </LinearLayout></RelativeLayout>




阅读全文
0 0
原创粉丝点击