Android SDcard 读写存 相关知识归纳

  • 在AndroidManifest.xml中插入应用程序要拥有的相关权限
    <!--在SDcard创建与删除文件的权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!--向SDcard中写入数据的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  • 读取文件内容出现中文乱码解决方案
文件编写时使用那种编码编写的,读取时使用响应编码
    如果这个文件以ANSI的编码格式保存的,那么
    new InputStreamReader(is,"GBK")
    如果这个文件以UTF-8的形式保存的,那么
    new InputStreamReader(is,"UTF-8")
  • 向SDcard中新建一个目录
private void createSdDir(String dirName){
    /*获取SDcard根目录*/
    File sd=Environment.getExternalStorageDirectory(); 
    /*创建文件路径*/
    String path=sd.getPath()+"/" + dirName; 
    /*创建file对象dirName目录*/
    File file=new File(path); 
    /**
    *判断是否存在engineerzhong目录
    *   file.exists()判断目录是否存在 存在返回true 不存在返回false
    *   !file.exists() 对结果取反 true则为false
    */
    if(!file.exists())
    /*目录不存在时创建目录,存在则不创建目录*/ 
    file.mkdir(); 
}
  • 获取SDcard根路径
public void getSDpath(){
        File sdDir = null;
        File sdDir1 = null;
        File sdDir2 = null;
boolean sdCardExist=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    if(sdCardExist){
        sdDir = Environment.getExternalStorageDirectory();
        sdDir1 = Environment.getDataDirectory();
        sdDir2 = Environment.getRootDirectory();
    }
    System.out.println("ExternalStorageDirectory:" + sdDir.toString());
    System.out.println("DataDirectory:" + sdDir1.toString());
    System.out.println("RootDirectory:" + sdDir2.toString());
}
  • Example
    xml文件就只有两个EditText和两个Button,这边不再赘述

    public class MainActivity extends AppCompatActivity {
    final String FILE_NAME = "/EngineerZhong.txt";
    private EditText edit1;
    private EditText edit2;
    private Button btn1;
    private Button btn2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit1 = (EditText) findViewById(R.id.edit1);
        edit2 = (EditText) findViewById(R.id.edit2);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        getSDpath();
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                write(edit1.getText().toString());
                Toast.makeText(MainActivity.this, "写入数据成功", Toast.LENGTH_SHORT).show();
                edit1.setText("");
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                edit2.setText(read());
            }
        });
    }
    /**
     * 写数据到SDcard
     * */
    private void write(String content){
        try{
            /**
             * 手机是否插入了SDcard,并且应用程序是否具有访问SDcard的权限**/
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                //获取SDcard的根目录
                File sdCardDir = Environment.getExternalStorageDirectory();
                File targetFile = new File(sdCardDir.getCanonicalPath() + FILE_NAME);
                //以指定文件创建RandomAccessFile对象
                RandomAccessFile raf = new RandomAccessFile(targetFile,"rw");
                System.out.println(targetFile.toString());
                //文件记录指针移到文件末尾
                raf.seek(targetFile.length());
                //输出文件内容
                raf.write(content.getBytes());
                //关闭RandomAccessFile
                raf.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 读取文件数据
     * */
    private String read(){
        try{
            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                File sdCardDir = Environment.getExternalStorageDirectory();
                FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME);
                BufferedReader buffer = new BufferedReader(new InputStreamReader(fis));
                StringBuilder sb = new StringBuilder("");
                String line = null;
                while((line = buffer.readLine()) != null){
                    sb.append(line);
                }
                buffer.close();
                return sb.toString();
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
 }
更新时间:2016811By:EngineerZhong
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值