实现读取某文件夹下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
- 实现读取某文件夹下txt、图片,并按钮点击上一个下一个文件中的txt,图片
- 需求(Java语言实现):对存有图片URL的txt文件进行逐行读取,自行下载txt文件中的图片到指定文件夹中
- 点击按钮,读取txt文件,并在EDIT显示
- 将txt文本中的图片路径的图片读到某文件夹下
- 读取一个文件夹下所有的txt文件,并保存到一个txt文本中
- c++读取某文件夹下的所有文件并查找.txt类型文件名
- 如何读取assets文件夹中的txt文件
- 如何读取assets文件夹中的txt文件
- 从.txt文件中批量读取图片
- Python实例1-读取指定文件夹下指定类型的图片名,打乱后输出txt
- 读取文件夹里面的图片生成对应的txt
- java实现读取txt文件中的内容
- 利用Opencv读取图片RGB值并存储在txt文件中
- 利用Opencv读取图片RGB值并存储在txt文件中
- python实现对于多个文件夹下的txt文件的特定字段进行提取,并生成新的txt
- 读取文件夹下的子文件夹的所有文件名,并保存成以子文件命名的txt文件
- 读取文件中的所有图片的路径,保存到txt文件中。
- NSBundle读取图片 plist文件和txt文件
- 常用的实现多线程的两种方式
- 在 Windows下安装Sass和Ruby
- 【2017-5-15】
- 5.使用Intent实现Activity之间对象的传输
- 通过AndroidManifest配置来设计游戏的闪屏页
- 实现读取某文件夹下txt、图片,并按钮点击上一个下一个文件中的txt,图片
- leetcode-78. Subsets(非重复元素子集合)
- Maven 学习
- 【Maven学习】maven基本命令
- 存储过程中的SET NOCOUNT ON
- 操作系统原理与实践4--进程运行轨迹的跟踪与统计
- 蓝牙通讯的开发
- 超大背包
- [LeetCode]27. Remove Element