Android测试读写sd卡文件与写sd卡文件耗时
测试从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卡文件耗时的更多相关文章
- sd卡脱机烧写系统的方法(测试成功)
一.sd卡烧写系统的基本思路: (1)把uboot.bin烧写到sd卡 (2)把image整个文件夹复制到sd卡 (3)开发板从sd卡启动,就开始自动烧写到nandflash中了. 二.烧写uboot ...
- android应用开发--------------看RadioGroup源代码,写相似单选选项卡的集成控件(如底部导航,tab等等)
博客为 有时个哥 原创.如需转载请标明出处:http://blog.csdn.net/ls703/article/details/46694967 watermark/2/text/aHR0cDovL ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- Pro Android 4 第六章 构建用户界面以及使用控件(一)
目前为止,我们已经介绍了android的基础内容,但是还没开始接触用户界面(UI).本章我们将开始探讨用户界面和控件.我们先讨论一下android中UI设计的一般原理,然后我们在介绍一下an ...
- 【Android测试】【第十六节】Instrumentation——初识+实战
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5503645.html 前言 有朋友给我留言说,能否介绍一下 ...
- 【Android测试】【随笔】模拟长按电源键
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5195121.html 起因 昨天群里看到有人问如何实现一个 ...
- 读、写SD上的文件请按如下步骤进行
1.调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限.例如使用如下代码//Environment.getE ...
- Android Binder机制详解:手写IPC通信
想要掌握一样东西,最好的方式就是阅读理解它的源码.想要掌握Android Binder,最好的方式就是写一个AIDL文件,然后查看其生成的代码.本文的思路也是来自于此. 简介 Binder是Andro ...
- Android测试入门学习
一,Android测试新人练习——安装及文件传输 [课前准备] Android测试环境搭建 1.下载并安装JDK: http://www.oracle.com/technetwork/java/jav ...
随机推荐
- Stage3D&Away3D整理ppt
资料下载地址:http://files.cnblogs.com/xignzou/away3D%E6%A1%86%E6%9E%B6%E5%AD%A6%E4%B9%A0%E5%88%86%E4%BA%AB ...
- C# 泛型方法
泛型方法是使用类型参数声明的方法,如下所示: static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = r ...
- SVN常见问题(转)
svn常见问题,报错,命令及我的总结 (2013-07-19 18:07:27) 转载▼ 我自己犯过的一个错误是:/svn/MyERP_core_Main/!svn/act/b8bd621b- ...
- 模式识别 - libsvm的函数调用方法 具体解释
libsvm的函数调用方法 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM的 ...
- PHP中插件机制的一种实现方案
这篇文章的出发点是我对插件机制的理解,及其在PHP中的实现.此方案仅是插件机制在PHP中的实现方案之一,写下来和大家分享,欢迎大家一起讨论. 插件,亦即Plug-in,是指一类特定的功能模块(通常由第 ...
- Dynamic Web Project 的学习笔记
文章框架: 1.Dynamic Web Project 概念 2.eclipse 中的动态Web 项目与 Myeclipse 中的web项目有何区别 3.动态的运行原理及目录结构---是否都涉及到由 ...
- SVN如何新建用户并分配权限
打开SVN服务端,找到特定的项目目录,单击右键,然后点击属性: 在弹出的页面中,点击增加: 在增加的页面中,你可以选择之前已经创建的用户,也可以重新创建用户名和密码: 如果是选择已经有的用 ...
- Servlet 编写过滤器
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servlet 过滤 ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的alsa音频pcm g711 和aac 音频格式
(1)alsa pcm (2)g711 (3)aac (4) --------------author:pkf -------------------time:2-4 ---------------- ...
- shell学习五十八天----/proc文件系统
/proc文件系统 前言:linux中的/proc文件系统,由一组文件夹和文件组成,挂载(mount)与/proc文件夹下. /proc文件系统是一种虚拟文件系统,以文件系统文件夹和文件形式,提供一个 ...