测试从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. SpringCloud系列十:使用Feign实现声明式REST调用

    1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User fin ...

  2. sqlserver利用链接服务器查询或同步本地数据库和远程数据库

    这个实际上是SQLserver的分布式查询:如果一个项目需要二至多台服务器,而我们又必须从几台服务器中将数据取出来,这就必须用分布式查询!在这里有两个概念:本地数据源.远程数据源!本地数据源指的是单个 ...

  3. [ci]项目规划-后续

      几个方面来写   1,搭建gitlab 配邮箱 域名等使之好用 2,搭建jenkins –yum,安装常见插件 3,搭建sonar,汉化 4,安装sonar-scanner   0,实现sonar ...

  4. centos7+nginx部署asp.net core mvc网站

    1. 安装 .net core 可参见官网安装教程. 选择Linux发行版本为Centos/Oracle 添加dotnet的yum仓库配置 $ sudo rpm -Uvh https://packag ...

  5. java-FileDemo

    关于file类的使用:文件的增删查 package com.example; import java.io.File; import java.io.IOException; public class ...

  6. Android中makfile的随记

    什么是makefile?也许非常多Winodws的程序员都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我认为要作一个好的Android底层程序员. makefile还是要懂. ...

  7. [Android]ListView & ViewPager & GridView 常见问题解决方法

    1. ViewPager左右滚动到两边时的渐变色,若想禁止,可以在布局文件中配置:android:overScrollMode="never" 2. ListView,GridVi ...

  8. sed & awk & grep 专题( 鸟哥 )

    grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容分析并处理. awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条 ...

  9. htm5 俄罗斯方块

    <!DOCTYPE html> <html manifest="tetris.manifest"> <!--在HTML标签里manifest=”cac ...

  10. Eclipse 菜单

    Eclipse 菜单 Eclipse 查看的菜单栏通常包含以下几个菜单: File 菜单 Edit 菜单 Navigate 菜单 Search 菜单 Project 菜单 Run 菜单 Window ...