测试从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. [转]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——初识+实战

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处: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 Chrome Tab 标题 乱码

    1. 刚装完ubuntu 14.04 英文版, 又装了google chrome 浏览器. 2. 打开chrome浏览器,发现tab也没的标题是乱码: 3. 而系统自带的firefox却没有这个问题, ...

  2. 用C#实现XML和实体类之间序列化和反序列化相互转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. JAVA 利用SimpleDateFormat将String转换为格式化的日期

    1. /** * 使用用户格式提取字符串日期 * * @param strDate 日期字符串 * @param pattern 日期格式 * @return */ public static Dat ...

  4. 使用pycharm手动搭建python语言django开发环境(三) 使用django的apps应用 添加应用静态文件

    1)在django 工程目录中使用cmd命令行 敲入"python manage.py startapp app名称(例子为blog)" 2)在django工程目录中应该生成了bl ...

  5. row format delimited fields terminated by ','

    row format delimited fields terminated by ',' 以','结尾的行格式分隔字段

  6. linux fedora 14(内核2.6.35.6) PF_RING+libpcap 极速捕获千兆网数据包,不丢包

    前面讲到了libpcap 捕获数据包,尤其在千兆网的条件下,大量的丢包,网上搜索好久,大概都是PF_PACKET +MMAP,NAPI,PF_RING之类的方法,我对PF_RING+libpcap进行 ...

  7. 盘点20款主流应用FPS,最Skr帧率测试方法都在这里!

    ​​​无论是手机端还是PC端,画面的流畅度一直被用户视为衡量应用视觉体验的重要标准.用户往往通过主观感觉把视觉体验分为两种状态: 流畅视觉:行云流水,一气呵成: 非流畅视觉:“卡顿”.“抖动”.“迟钝 ...

  8. 第一百九十六节,jQuery EasyUI,Tooltip(提示框)组件

    jQuery EasyUI,Tooltip(提示框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Tooltip(提示框)组件的使用方法, ...

  9. jQuery DOM 元素方法

    函数 描述 .get() 获得由选择器指定的 DOM 元素. .index() 返回指定元素相对于其他指定元素的 index 位置. .size() 返回被 jQuery 选择器匹配的元素的数量. . ...

  10. Log4Net 笔记

    Log4net框架简介: Log4net 是 Apache 下的一个开源项目,log4net框架基于Apache log4j™.Log4net用于日志记录或跟踪API,它允许开发人员控制以任意粒度输出 ...