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

时间:2022-06-03 13:32:45

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

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

  直接上代码:

  

 package com.example.ghimtim.myapplication;

 import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.SystemClock;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{ private static final int MY_PERMISSIONS_REQUEST = 10000; private Button bt_wr;
private Button bt_w;
private TextView tv_wr;
private TextView tv_w;
private EditText et_time;
private File sdcard; private Context mContext; int Fortime = 1000;
char[] buffer = new char[1024];
long time; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
requestpermisson();
sdcard= Environment.getExternalStorageDirectory();
initData();
initView();
} private void initData() {
for(int i = 0 ; i < 1024;i++){
buffer[i] = 'b';
}
} private void requestpermisson() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST); } @Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the
// contacts-related task you need to do. } else {
Toast.makeText(this,"no permission!",Toast.LENGTH_LONG).show();
// this.finish();
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
}
} private void initView() {
bt_wr = (Button) findViewById(R.id.write_read_sd_file);
bt_w = (Button) findViewById(R.id.write_sd_file);
tv_wr = (TextView) findViewById(R.id.write_read_sd_file_time);
tv_w = (TextView) findViewById(R.id.write_sd_file_time);
et_time = (EditText) findViewById(R.id.for_time);
et_time.setText(String.valueOf(Fortime));
bt_wr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!et_time.getText().toString().equals("")){
Fortime = Integer.parseInt(et_time.getText().toString());
}
time = System.currentTimeMillis();
writeAndReadForTime(); }
});
bt_w.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!et_time.getText().toString().equals("")){
Fortime = Integer.parseInt(et_time.getText().toString());
}
time = System.currentTimeMillis();
ReadFileForTime();
}
});
} private void ReadFileForTime() {
for(int i =0;i<Fortime;i ++){
ReadFile();
}
time = System.currentTimeMillis() - time;
tv_w.setText(String.valueOf(time));
} private void writeAndReadForTime() {
for(int i =0;i<Fortime;i ++){
writeAndRead();
}
time = System.currentTimeMillis() - time;
tv_wr.setText(String.valueOf(time));
} private void ReadFile() {
File file2 = new File(sdcard,"c.txt");
if(!sdcard.exists()){
return;
}
try{
// file2.createNewFile();
FileOutputStream fos=new FileOutputStream(file2);
OutputStreamWriter osw=new OutputStreamWriter(fos);
String str = new String(buffer);
osw.write(str);
osw.flush();
osw.close();
fos.close();
}catch (Exception e){
e.printStackTrace();
}
} private void writeAndRead() {
File file1 = new File(sdcard,"a.txt");
File file2 = new File(sdcard,"b.txt");
if(!sdcard.exists()){
return;
}
try{
// file2.createNewFile();
FileInputStream fis = new FileInputStream(file1);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
FileOutputStream fos=new FileOutputStream(file2);
OutputStreamWriter osw=new OutputStreamWriter(fos);
char[] input = new char[fis.available()];
isr.read(input);
String str = new String(input);
osw.write(str);
osw.flush();
isr.close();
fis.close();
osw.close();
fos.close();
}catch (Exception e){
e.printStackTrace();
}
}
}

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

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

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

  

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

  1. sd卡脱机烧写系统的方法(测试成功)

    一.sd卡烧写系统的基本思路: (1)把uboot.bin烧写到sd卡 (2)把image整个文件夹复制到sd卡 (3)开发板从sd卡启动,就开始自动烧写到nandflash中了. 二.烧写uboot ...

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

    博客为 有时个哥 原创.如需转载请标明出处:http://blog.csdn.net/ls703/article/details/46694967 watermark/2/text/aHR0cDovL ...

  3. &lbrack;转&rsqb;Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  4. Pro Android 4 第六章 构建用户界面以及使用控件(一)

         目前为止,我们已经介绍了android的基础内容,但是还没开始接触用户界面(UI).本章我们将开始探讨用户界面和控件.我们先讨论一下android中UI设计的一般原理,然后我们在介绍一下an ...

  5. 【Android测试】【第十六节】Instrumentation——初识&plus;实战

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5503645.html 前言 有朋友给我留言说,能否介绍一下 ...

  6. 【Android测试】【随笔】模拟长按电源键

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5195121.html 起因 昨天群里看到有人问如何实现一个 ...

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

    1.调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限.例如使用如下代码//Environment.getE ...

  8. Android Binder机制详解:手写IPC通信

    想要掌握一样东西,最好的方式就是阅读理解它的源码.想要掌握Android Binder,最好的方式就是写一个AIDL文件,然后查看其生成的代码.本文的思路也是来自于此. 简介 Binder是Andro ...

  9. Android测试入门学习

    一,Android测试新人练习——安装及文件传输 [课前准备] Android测试环境搭建 1.下载并安装JDK: http://www.oracle.com/technetwork/java/jav ...

随机推荐

  1. Linux运行级详解

    对于那些在DOS/Win9x/NT平台下的高级用户而言,Linux似乎是一个怪物.没有config.sys,没有 autoexec.bat,具有个人特色的机器配置不知道从何开始. 需要说明的是,很多人 ...

  2. css实现阴影效果&lpar;box-shadow&rpar;

    box-shadow 使用方法 设置块阴影 语法: box-shadow:<length> <length> <length> <length> ||  ...

  3. QQ音乐的各种相关API

    QQ音乐的各种相关API 分类: oc2014-01-29 15:34 2676人阅读 评论(2) 收藏 举报 基本上论坛里做在线音乐的都在用百度的API,进来发现百度的API不仅歌曲的质量不可以保证 ...

  4. OC的类方法、对象方法和函数

    OC语言中的方法和函数是有区别的:类内部叫方法,单独定义的叫函数,定义的格式也不同 类方法:+ (void) 方法名.对象方法:- (void) 方法名.函数:void 函数名(参数列表) #impo ...

  5. VBA Excel 常用 自定义函数

    1. 将 互换 Excel 列号(数字/字母) Public Function excelColumn_numLetter_interchange(numOrLetter) As String Dim ...

  6. C语言进行CGI程序设计

    一.CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给 ...

  7. cp 覆盖 &bsol;cp a test&bsol;a

    使用cp命令覆盖文件总是提示要输入yes或no,一个两个就算了,大量的文件复制就不行了,即使加上-f参数也无法强行覆盖.苦思冥想不得解,终于在查阅了众多资料后让我找到了解决方法,这里写出来,让有同样困 ...

  8. org&period;hibernate&period;TransientObjectException&colon;The given object has a null identifier

    1.错误描述 org.hibernate.TransientObjectException:The given object has a null identifier:com.you.model.U ...

  9. &lpar;二分查找 拓展&rpar; leetcode 34&period; Find First and Last Position of Element in Sorted Array &amp&semi;&amp&semi; lintcode 61&period; Search for a Range

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  10. linux随机生成密码

    1.mkpassword工具 # 使用最多的密码生成工具 yum -y install expect #需要安装expect工具 mkpasswd -l -d -c -C -s #直接在命令行进行随机 ...