测试从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. Atitit.js this错误指向window的解决方案

    Atitit.js this错误指向window的解决方案 1.1. 出现地点and解决之道1 1.2. call,apply和bind这三个方法2 1.2.1. Function.prototype ...

  2. 一些I2S的基础概念

    在数字音频Datasheet中,我们经常看到256FS,384FS,32kHz,44.1kHz MCLK等概念.一般在数字音频芯片用3个pin作为通讯接口:BCLK,ADCLRC,DOUT.现在做个总 ...

  3. Nginx编译安装第三方模块http_substitutions_filter_module2222

    Nginx编译安装第三方模块http_substitutions_filter_module Rming -- 阅读 安装 Http 编译 module filter nginx 模块 >> ...

  4. iOS开发多线程篇 10 —NSOperation基本操作

    iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...

  5. mysql之replicate_do_table/replicate_ingore_table/replicate_wide_do_table/replicate_wide_ingore_table

    参考:http://yhqlzz.blog.51cto.com/2557314/1159084/ mysql官网:http://dev.mysql.com/doc/refman/5.1/en/repl ...

  6. c#序列化和反序列化list

    List<UserData> lstStuModel = new List<UserData>() { new UserData(){Name="001", ...

  7. 【LeetCode】 Rotate List 循环链表

    题目:rotate list 解法1: <span style="font-size:18px;">/**LeetCode Rotate List:Given a li ...

  8. 003android初级篇之【转】Android开发中颜色的定义方法

    正好用到颜色的定义,但脑子里没有记住具体,转载一篇加强印象 1.使用Color类的常量,如: int color = Color.BLUE; // 创建一个蓝色 是使用Android提供的颜色 int ...

  9. CSDN学院 免费技术答疑公开课,本周四场即将开播~~~

    为了酬谢广大学员,CSDN学院特推出免费技术答疑公开课,让您开启一段充实的学习之旅~ 本周四场即将开播! ----------------------------------------------- ...

  10. 桥接模式和NAT模式差别

    bridged networking(桥接模式)      在这样的模式下.VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它能够訪问网内不论什么一台机器. 在桥接模式下.你须要手工为虚 ...