实现读取某文件夹下txt、图片,并按钮点击上一个下一个文件中的txt,图片
2017-05-15 22:28
846 查看
忙活许久实现软件读取某文件下图片、txt文字,显示在TextView和ListView上并且两个按钮点击功能为显示下一个文件中的图片、文字,或者上一个的图片、文字importandroid.app.Activity;importandroid.media.MediaScannerConnection;importandroid.net.Uri;importandroid.os.Bundle;importandroid.os.Environment;importandroid.os.Handler;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;importandroid.widget.ListView;importandroid.widget.TextView;importandroid.widget.Toast;importjava.io.DataOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importstaticcom.example.creationio.TxtScanner.Txt;/***Createdby允琪on2017/5/3.*/publicclassTestActivityextendsActivityimplementsMediaScannerConnection.MediaScannerConnectionClient{List<Object>listpath;publicString[]allFiles;publicString[]allname;publicstaticTestActivitymactivity;publicstaticStringSCAN_PATH;publicstaticfinalStringFILE_TYPE="image/*";publicstaticStringsdPath="/sdcard/File/";publicStringscanpath2;publicstaticMediaScannerConnectionconn;privateTextViewcar_number,out_line_content,out_line_time,out_line_place;privateButtonbtn_submit,btn_next,btn_this;ImageScanner.Myadapteradapter;publicListViewlistView;publicFilefolder,folder2;privateHandlerhandler;privateintflag;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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=newArrayList<Object>();listView=(ListView)this.findViewById(R.id.listView1);folder=newFile(sdPath);allFiles=folder.list();//此处显示当前地址sdpath="/sdcard/File/";这里面的文件夹我这里File有1,2,3,4四个文件夹folder2=newFile(sdPath+allFiles[flag]);allname=folder2.list();//此处显示当前地址上面File中1-4个文件夹中的内容,这里flag为全局indexStringaddress=sdPath+allFiles[flag];Strings1=TxtScanner.Txt(address).get(0);//从Mapget(key=0)的value//此处调用TxtScanner中Txt方法,获取文件夹下文字并且每一行读到Map一个键值对里Strings2=TxtScanner.Txt(address).get(1);Strings3=TxtScanner.Txt(address).get(2);Strings4=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(inti=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=newImageScanner.Myadapter(getApplicationContext()); adapter.setdate(listpath); Log.d("listpath",listpath.toString()); listView.setAdapter(adapter); adapter.notifyDataSetChanged(); } } btn_this.setOnClickListener(newView.OnClickListener(){//其实这是上一个文件夹,不想改了 @Overrid 4000 e //这里都和onCreate类似,但有一点要注意要清listpath,因为是全局变量,所以显示下一个时会捎上上面查看的图片地址 publicvoidonClick(Viewview){ listpath.clear(); //这里要稳 --flag; if(flag<0){ Toast.makeText(TestActivity.this,"已经是第一个文件",Toast.LENGTH_SHORT).show();//一定要判断,不然会Bug闪退 }else{ Stringaddress=sdPath+allFiles[flag]; Strings1=TxtScanner.Txt(address).get(0);//从Mapget(key=0)的value Strings2=TxtScanner.Txt(address).get(1); Strings3=TxtScanner.Txt(address).get(2); Strings4=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=newFile(sdPath+allFiles[flag]); allname=folder2.list(); for(inti=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=newImageScanner.Myadapter(getApplicationContext()); adapter.setdate(listpath); listView.setAdapter(adapter); adapter.notifyDataSetChanged(); } } } } }); btn_next.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewview){ listpath.clear(); ++flag; if(flag>allFiles.length-1){ Toast.makeText(TestActivity.this,"已经是最后一个文件",Toast.LENGTH_SHORT).show(); }else{ Stringaddress=sdPath+allFiles[flag]; Strings1=Txt(address).get(0);//从Mapget(key=0)的value Strings2=Txt(address).get(1); Strings3=Txt(address).get(2); Strings4=Txt(address).get(3); car_number.setText(s1); out_line_content.setText(s2); out_line_time.setText(s3); out_line_place.setText(s4); folder2=newFile(sdPath+allFiles[flag]); allname=folder2.list(); for(inti=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=newImageScanner.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(); }); } privatevoidstartScan(){ Log.d("Connected","-->>success"+conn); if(conn!=null){ conn.disconnect(); } conn=newMediaScannerConnection(this,this); conn.connect(); } @Override publicvoidonMediaScannerConnected(){ conn.scanFile(SCAN_PATH,FILE_TYPE); } @Override publicvoidonScanCompleted(Stringpath,Uriuri){ try{ }finally{ conn.disconnect(); conn=null; } }
ImageScanner类
importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.media.MediaScannerConnection;importandroid.net.Uri;importandroid.util.Log;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importjava.util.List;importstaticcom.example.creationio.TestActivity.FILE_TYPE;importstaticcom.example.creationio.TestActivity.SCAN_PATH;importstaticcom.example.creationio.TestActivity.conn;/***Createdby允琪on2017/5/5.*/publicclassImageScanner{publicstaticclassMyadapterextendsBaseAdapter{privateContextcontext;privateLayoutInflaterinflater;privateList<Object>listpath;//没啥好说的,就这个listPath是从Activity传过来的@SuppressWarnings("unused")publicvoidsetdate(List<Object>path){this.listpath=path;}@SuppressWarnings("static-access")publicMyadapter(Contextcontext){this.context=context;inflater=inflater.from(context);}@OverridepublicintgetCount(){returnlistpath.size();}@OverridepublicObjectgetItem(intposition){returnlistpath.get(position);}@OverridepubliclonggetItemId(intposition){returnposition;}@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){convertView=null;convertView=inflater.inflate(R.layout.list_layout,null);ImageViewimageView=(ImageView)convertView.findViewById(R.id.imageView1);Bitmapbitmap;Stringname=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);}elseif(name.contains("txt")){Log.d("findtxt",name);}returnconvertView;}}}
TxtScanner类
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStreamReader;importjava.util.HashMap;importjava.util.Map;importstaticcom.example.creationio.TestActivity.*;importstaticcom.example.creationio.TestActivity.sdPath;/***Createdby允琪on2017/5/5.*/publicclassTxtScanner{publicstaticMap<Integer,String>Txt(Stringpath){//将读出来的一行行数据使用Map存储StringfilePath=path+"/outline.txt";//手机上地址Map<Integer,String>map=newHashMap<Integer,String>();try{Filefile=newFile(filePath);intcount=0;//初始化key值if(file.isFile()&&file.exists()){//文件存在的前提InputStreamReaderisr=newInputStreamReader(newFileInputStream(file),"GBK");BufferedReaderbr=newBufferedReader(isr);StringlineTxt=null;while((lineTxt=br.readLine())!=null){//一行一行if(!"".equals(lineTxt)){Stringreds=lineTxt.split("\\+")[0];//java正则表达式map.put(count,reds);//依次放到map0,value0;1,value2count++;}}isr.close();br.close();}else{//Toast.makeText(mactivity,"cannotfindfile",Toast.LENGTH_SHORT).show();//找不到文件情况下}}catch(Exceptione){e.printStackTrace();}returnmap;}}写完终于觉得,唉,终于放松了Test_layout布局<RelativeLayoutxmlns: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"><ListViewandroid: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><Buttonandroid: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"/><Buttonandroid: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"/><Buttonandroid:id="@+id/btnnext"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下一条"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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"/><TextViewandroid: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布局<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#fffffb"android:orientation="horizontal"android:weightSum="1"><ImageViewandroid:id="@+id/imageView1"android:layout_gravity="center"android:layout_height="249dp"android:layout_width="380dp"/></LinearLayout></RelativeLayout>
相关文章推荐
- 需求(Java语言实现):对存有图片URL的txt文件进行逐行读取,自行下载txt文件中的图片到指定文件夹中
- C#怎么通过一个按钮Button,实现点击这个按钮可以打开一个文件或者文件夹?
- 实现读取文件夹中文件,复制到另外一个文件夹,并且删除原来的文件包括(图片和PDF)
- 从一个java项目里面读取多个Java文件到一个txt实现备份
- asp.net 实现打开文件所在的文件夹, 本地可以打开,发布后点击按钮没有反应的解决办法
- 点击按钮,读取txt文件,并在EDIT显示
- 用R语言实现选取一个文件夹下所有txt文件的几列数据
- javascript实现一个按钮,点击按钮拷贝电脑指定路径到u盘(并在U盘上创建新的文件夹)
- c#实现将一个文件夹中的所有文件复制到另一个文件夹,并在新文件夹中创建一个txt文件记录copy的文件综述以及文件名称
- tab选项卡前后有向前和向后按钮,点击实现上一个下一个
- 如何实现点击Winform程序窗体中的一个按钮,执行这个exe文件?
- C#控制台控制台将一个文件夹中的所有txt文件中的数据读取出来
- 用mfc如何实现将一个文件拷贝到另一个文件夹中例如:C:\WINDOWS\a.txt中的a.txt文件拷贝到D:\Program
- 怎么用c语言实现读取一个txt文件里的数据 要按行读出来
- python实现将文件夹内所有txt文件合并成一个文件
- canvas画一个图片,并实现点击按钮上移下移左移右移放大缩小
- 读取一个文件夹下所有的txt文件,并保存到一个txt文本中
- windows 读取一个路径下的文件夹和文件(目前只实验了txt文件)
- 怎样用matlab读取一个文件夹下的多个子文件夹中的多个图片文件
- C#控制台控制台将一个文件夹中的所有txt文件中的数据读取出来