Android测试读写sd卡文件与写sd卡文件耗时

  测试从sd卡读1k大小的文件,再写1k大小的文件,由于处理耗时很短,所以循环500次,查看耗时;测试写1k大小的文件,直接在内存构造一个1k的buffer,将这个buffer直接写到文件,同样循环500次,查看耗时。

  思路:首先读写文件,建立文件输入输出流,然后将读取的数据直接写入文件,打印时间戳,查看耗时;只写文件,新建一个1k的buffer,然后用文件输出流写入文件,打印时间戳,查看耗时。

  直接上代码:

  

  1 package com.example.ghimtim.myapplication;
  2
  3 import android.Manifest;
  4 import android.content.Context;
  5 import android.content.pm.PackageManager;
  6 import android.os.Environment;
  7 import android.os.SystemClock;
  8 import android.support.v4.app.ActivityCompat;
  9 import android.support.v4.content.ContextCompat;
 10 import android.support.v7.app.AppCompatActivity;
 11 import android.os.Bundle;
 12 import android.view.View;
 13 import android.widget.Button;
 14 import android.widget.EditText;
 15 import android.widget.TextView;
 16 import android.widget.Toast;
 17
 18 import java.io.File;
 19 import java.io.FileInputStream;
 20 import java.io.FileOutputStream;
 21 import java.io.InputStreamReader;
 22 import java.io.OutputStreamWriter;
 23
 24 public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{
 25
 26     private static final int MY_PERMISSIONS_REQUEST = 10000;
 27
 28     private Button bt_wr;
 29     private Button bt_w;
 30     private TextView tv_wr;
 31     private TextView tv_w;
 32     private EditText et_time;
 33     private File sdcard;
 34
 35     private Context mContext;
 36
 37     int Fortime = 1000;
 38     char[] buffer = new char[1024];
 39     long time;
 40
 41
 42     @Override
 43     protected void onCreate(Bundle savedInstanceState) {
 44         super.onCreate(savedInstanceState);
 45         setContentView(R.layout.activity_main);
 46         mContext = this;
 47         requestpermisson();
 48         sdcard= Environment.getExternalStorageDirectory();
 49         initData();
 50         initView();
 51     }
 52
 53     private void initData() {
 54         for(int i = 0 ; i < 1024;i++){
 55             buffer[i] = ‘b‘;
 56         }
 57     }
 58
 59     private void requestpermisson() {
 60         ActivityCompat.requestPermissions(this,
 61             new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
 62                 MY_PERMISSIONS_REQUEST);
 63
 64     }
 65
 66     @Override
 67     public void onRequestPermissionsResult(int requestCode,
 68                                            String permissions[], int[] grantResults) {
 69         switch (requestCode) {
 70             case MY_PERMISSIONS_REQUEST: {
 71                 // If request is cancelled, the result arrays are empty.
 72                 if (grantResults.length > 0
 73                         && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 74
 75                     // permission was granted, yay! Do the
 76                     // contacts-related task you need to do.
 77
 78                 } else {
 79                   Toast.makeText(this,"no permission!",Toast.LENGTH_LONG).show();
 80 //                    this.finish();
 81                     // permission denied, boo! Disable the
 82                     // functionality that depends on this permission.
 83                 }
 84                 return;
 85             }
 86         }
 87     }
 88
 89     private void initView() {
 90         bt_wr = (Button) findViewById(R.id.write_read_sd_file);
 91         bt_w = (Button) findViewById(R.id.write_sd_file);
 92         tv_wr = (TextView) findViewById(R.id.write_read_sd_file_time);
 93         tv_w = (TextView) findViewById(R.id.write_sd_file_time);
 94         et_time = (EditText) findViewById(R.id.for_time);
 95         et_time.setText(String.valueOf(Fortime));
 96         bt_wr.setOnClickListener(new View.OnClickListener() {
 97             @Override
 98             public void onClick(View v) {
 99                 if(!et_time.getText().toString().equals("")){
100                     Fortime =  Integer.parseInt(et_time.getText().toString());
101                 }
102                 time = System.currentTimeMillis();
103                 writeAndReadForTime();
104
105             }
106         });
107         bt_w.setOnClickListener(new View.OnClickListener() {
108             @Override
109             public void onClick(View v) {
110                 if(!et_time.getText().toString().equals("")){
111                     Fortime =  Integer.parseInt(et_time.getText().toString());
112                 }
113                 time = System.currentTimeMillis();
114                 ReadFileForTime();
115             }
116         });
117     }
118
119     private void ReadFileForTime() {
120         for(int i =0;i<Fortime;i ++){
121             ReadFile();
122         }
123         time = System.currentTimeMillis() - time;
124         tv_w.setText(String.valueOf(time));
125     }
126
127     private void writeAndReadForTime() {
128         for(int i =0;i<Fortime;i ++){
129             writeAndRead();
130         }
131         time = System.currentTimeMillis() - time;
132         tv_wr.setText(String.valueOf(time));
133     }
134
135     private void ReadFile() {
136         File file2 =  new File(sdcard,"c.txt");
137         if(!sdcard.exists()){
138             return;
139         }
140         try{
141 //            file2.createNewFile();
142             FileOutputStream fos=new FileOutputStream(file2);
143             OutputStreamWriter osw=new OutputStreamWriter(fos);
144             String str = new String(buffer);
145             osw.write(str);
146             osw.flush();
147             osw.close();
148             fos.close();
149         }catch (Exception e){
150             e.printStackTrace();
151         }
152     }
153
154     private void writeAndRead() {
155         File file1 = new File(sdcard,"a.txt");
156         File file2 =  new File(sdcard,"b.txt");
157         if(!sdcard.exists()){
158             return;
159         }
160         try{
161 //            file2.createNewFile();
162             FileInputStream fis = new FileInputStream(file1);
163             InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
164             FileOutputStream fos=new FileOutputStream(file2);
165             OutputStreamWriter osw=new OutputStreamWriter(fos);
166             char[] input =  new char[fis.available()];
167             isr.read(input);
168             String str = new String(input);
169             osw.write(str);
170             osw.flush();
171             isr.close();
172             fis.close();
173             osw.close();
174             fos.close();
175         }catch (Exception e){
176             e.printStackTrace();
177         }
178     }
179 }

  还有一个注意的地方,读写sd卡,在Android6.0以后需要动态申请读写外部存储的权限!

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  (编码时粗心地将uses-permission写进application标签里面= =,这个uses-permission是应该要和application同级的。。。)

  

时间: 2024-10-11 04:04:45

Android测试读写sd卡文件与写sd卡文件耗时的相关文章

android测试教程

Android测试教程(1):概述 发表于 2011 年 07 月 31 日 由 guidebee 测试也是开发过程中一个重要组成部分,Android开发环境集成一个测试框架可以用来测试Android应用的各个方面,单元测试,UI测试等. 本教程基于Android 开发教程英文版. 基本概念包括 Android测试的基础知识 Activity Testing 侧重于Activity的测试,介绍了如果使用Instrumentation 在正常Activity生命周期之外来控制Activity,然后

android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)

博客为 有时个哥 原创.如需转载请标明出处:http://blog.csdn.net/ls703/article/details/46694967 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHM3MDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 上面就是需求设计,4个类似的布局控件.每次仅仅能选择一个.然后得到上面相应的钱数.(上面仅

自个儿写Android的下拉刷新/上拉加载控件 (续)

本文算是对之前的一篇博文<自个儿写Android的下拉刷新/上拉加载控件>的续章,如果有兴趣了解更多的朋友可以先看一看之前的这篇博客. 事实上之所以会有之前的那篇博文的出现,是起因于前段时间自己在写一个练手的App时很快就遇到这种需求.其实我们可以发现类似这样下拉刷新.上拉加载的功能正在变得越来越普遍,可以说如今基本上绝大多数的应用里面都会使用到.当然,随着Android的发展,已经有不少现成的可以实现这种需求的"轮子"供我们使用了. 但转过头想一下想,既然本来就是自己练手

Android 测试、数据存储与访问、XML解析与生成

1.android测试 1.黑盒测试: 是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的. 2. 白盒测试: 又称结构测试.透明盒测试.逻辑驱动测试或基于代码的测试. 3.单元测试: 又称模块测试,是开发者编写的一小段代码,用于检验被测代码的一个很小的.很明确的功能是否正确. 4.功能测试: 根据产品特性.操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求. 5.压力测试: 主体向被观察者布置一定量任务和作业,借以观察个体完成任务的行为. 6.集成测试: 是单元

Android测试&amp;权限机制&amp;数据存储

测试 黑盒测试 -测试人员不知道源代码 白盒测试 -测试人员知道源代码,能写一些测试用例 根据测试的粒度 方法测试 function test 单元测试 unit test junit测试框架 集成测试 integration test 系统测试 system test 根据测试的暴力程度 冒烟测试 smoke test 压力测试 pressure test 单元测试框架(JUnit) Android代码只能运行在手机中的Dalvik虚拟机里,在PC机的JVM下会报错异常,写测试用例,通常把上传

android文件读写的相关问题

将文件写入ROM中 如果我们应用在当前包下创建了一个文件,并且我们希望别的应用程序 可以访问我们的文件 一定要指定文件的权限  Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE 如果我们不希望别人修改,访问你的数据 Context.MODE_PRIVATE 如果我们希望每次存取数据 都是以追加方式(该方式只是一种文件添加的策略并非读写权限) Context.MODE_APPEND 默认文件的访问修饰权限 是私有 以私有方式创建的文件

Android sdcard读写权限问题之一

博主在刚刚在学习过程中发现了一个关于android往sdcard读写的问题, 配置了该配置的提示无读写权限. 在AndroidManifest.xml文件中配置清单如下 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.custom" android:versionCode="1" android:version

2014 非常好用的开源 Android 测试工具

2014 非常好用的开源 Android 测试工具 - 开源中国社区 当前有很大的趋势是转向移动应用平台,Android 是最广泛使用的移动操作系统,2014 年大约占 80% 以上的市场.在开发 Android 应用的时候要进行测试,现在市场上有大量的测试工具. 本文主要是展示一系列的开源 Android 测试工具.每个工具都会有相应的简短介绍,还有一些相关的资源.Android 测试工具列表是按照字母来排序的,最后还会介绍几个不是特别活跃的 Android 测试相关的开源项目. 本文提到的开

读、写SD上的文件请按如下步骤进行

1.调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限.例如使用如下代码//Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)2.调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录.3.使用FileInputStream.FileOutpu