android的基础学习

来源:互联网 发布:js获取数组索引值 编辑:程序博客网 时间:2024/05/17 00:14

今天看视频主要学习了android下文件访问的权限和android的存储。

首先,android下文件访问权限Permission:


 

文件权限

 

读(R)

 

 

写(W)

 

 

执行(X)

 


对应数字

 

4

 

 

2

 

 

1

 


 

第0位

第1~3位(当前用户)

第4~6(当前用户所在的分组)

第7~9(其他的用户)

对应权限数字相加

-代表文件(0)

r    w    x

r    w    x

r    w    x


d代表目录(1)

4    2    0

4    0    0

0    0    0

640


4    2   1

4    0    1

4    0    1

755


修改文件权限的方法暂时学到了两种:一种是通过代码:out = context.openFileOutput(filename, Context.MODE_PRIVATE);

                                                                     一种是通过cmd命令:将private.txt文件修改为全可读可写可执行

                                                                     adb shell 找到对应文件 chmod 666 private.txt


其次,android的存储分为两个方面,一部分是手机内部存储空间(可以理解成一块微硬盘/data/data),另一部分就是外部存储空间SD卡(sdcard)。将eclipse调成DDMS下FileExplorer中就可找到。


可以通过代码来获取SD卡的空间:

package com.example.application;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import com.example.applicationsdstorage.R;

import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.app.Activity;
import android.text.format.Formatter;
import android.view.Menu;
import android.view.TextureView;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView) findViewById(R.id.tv);
        
        File path=Environment.getExternalStorageDirectory();
        StatFs stat=new StatFs(path.getPath());
        long blockSize=stat.getBlockSize();
        long totalBlocks=stat.getBlockCount();
        long availableBlocks=stat.getAvailableBlocks();
        
        long totalSize=blockSize*totalBlocks;
        long availSize=availableBlocks*blockSize;
        
        String totalString=Formatter.formatFileSize(this, totalSize);
        String avaliString=Formatter.formatFileSize(this, availSize);
        
        tv.setText("总内存:"+totalString+"\n"+"可用内存"+avaliString+"\n"+getRomSpaceInfo());
    }
    
    public String getRomSpaceInfo(){
        File path=Environment.getDataDirectory();
        StatFs stat=new StatFs(path.getPath());
        long blockSize=stat.getBlockSize();
        long totalBlocks=stat.getBlockCount();
        long availableBlocks=stat.getAvailableBlocks();
        
        long totalSize=blockSize*totalBlocks;
        long availSize=availableBlocks*blockSize;
        
        String totalString=Formatter.formatFileSize(this, totalSize);
        String avaliString=Formatter.formatFileSize(this, availSize);
        
        return "手机总空间:"+totalString+"\n"+"手机可用内存"+avaliString;
      
        
    }

}


在用户登录注册环节,可以利用sharedPreference保存用户信息来完成记住密码信息的功能。

代码如下:

package com.example.application;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;

import com.example.application.LoginService.LoginService;
import com.example.applicationsharepreference.R;


import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    private static final String TAG="MainActivity";
    private EditText et_userid;
    private EditText et_password;
    private CheckBox cb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       et_userid=(EditText) this.findViewById(R.id.userid);
       et_password=(EditText) this.findViewById(R.id.password);
       cb=(CheckBox) this.findViewById(R.id.cb);
       
       SharedPreferences sPreferences=getSharedPreferences("config", MODE_PRIVATE);
       String userid=sPreferences.getString("username", "");
       et_userid.setText(userid);
       String password=sPreferences.getString("password", "");
       et_password.setText(password);
    }


    public void userLogin(View view)
    {
        String userid=et_userid.getText().toString().trim();
        String password=et_password.getText().toString().trim();
        Map<String, String> map=LoginService.getSaveUserInfo(this);
        try {
            if(TextUtils.isEmpty(userid)||TextUtils.isEmpty(password)){
                Toast.makeText(this, "用户名或者密码不能为空",Toast.LENGTH_LONG).show();
            }else {
                if(cb.isChecked()){
                    Log.i(TAG, "需要保存用户名密码");
                    LoginService.saveUserInfo(this, userid, password)
                            ;
                    
                        Toast.makeText(this, "保存用户信息成功", Toast.LENGTH_LONG).show();
                    
                }
                if("ljr".equals(userid)&&"123".equals(password))
                {
                    Toast.makeText(this, "登录成功", Toast.LENGTH_LONG).show();
                    
                    
                }else {
                    Toast.makeText(this, "密码用户错误",Toast.LENGTH_LONG).show();
                }
            }
            
        
        } catch (Exception e) {
            // TODO Auto-generated catch block
            
            e.printStackTrace();
            Toast.makeText(this, "失败", Toast.LENGTH_LONG).show();
        }
    }
}

package com.example.application.LoginService;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.Attributes.Name;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.AvoidXfermode.Mode;
import android.os.Environment;
import android.widget.Toast;

public class LoginService {
    /*
     * 保存用户名和密码的业务流程
     *
     * @param context 上下文
     *
     * @param userid用户名
     *
     * @param password密码
     *
     * @return true 保存成功 false保存失败
     */
    public static void saveUserInfo(Context context, String userid,
            String password) {
        
        SharedPreferences sPreferences=context.getSharedPreferences("config", context.MODE_PRIVATE);
        Editor editor=sPreferences.edit();  
        editor.putString("username", userid);
        editor.putString("password", password);
        editor.putBoolean("open", true);
        editor.putInt("count", 23);
        editor.putFloat("pi", (float) 3.21);
        editor.commit();
        

    }
    
    public static Map<String, String> getSaveUserInfo(Context context) {

        File file = new File("/sdcard/info.txt");
        try {
            FileInputStream fis=new FileInputStream(file);
            BufferedReader br=new BufferedReader(new InputStreamReader(fis));
            String str=br.readLine();
            //zhangsan##123
            String[] infos=str.split("##");
            Map<String, String> map=new HashMap<String, String>();
            map.put("userid", infos[0]);
            map.put("password", infos[1]);
            return map;
            

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

    }

}

用代码生成xml文件,这里演示的是备份手机中的短信内容到xml文件,采用了两种方式

代码入下:

package com.example.genXML;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.xmlpull.v1.XmlSerializer;

import com.example.genXML.domain.smsInfo;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
private List<smsInfo> smsInfos;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        smsInfos=new ArrayList<smsInfo>();
        Random random=new Random();
        long number= 1350000000;
        for(int i=0;i<10;i++)
        smsInfos.add(new smsInfo(System.currentTimeMillis(),1,"duanxinneirong"+i,Long.toString(number+i),i));
        
    }
/*
 * 备份手机的短信
 */
    public void backupSMS1(View view){
        StringBuilder sbBuilder=new StringBuilder();

        sbBuilder.append("<smss>");
        for(smsInfo info:smsInfos){
            sbBuilder.append("<sms>");
            sbBuilder.append("<address>");
            sbBuilder.append(info.getAddress());
            sbBuilder.append("</address>");
            
            sbBuilder.append("<type>");
            sbBuilder.append(info.getType());
            sbBuilder.append("</type>");
            
            sbBuilder.append("<body>");
            sbBuilder.append(info.getAddress());
            sbBuilder.append("</body>");
            
            sbBuilder.append("<date>");
            sbBuilder.append(info.getTime());
            sbBuilder.append("</date>");
        }
            sbBuilder.append("</smss>");
            try {
                File file=new File(Environment.getExternalStorageDirectory(),"backup.xml");
                FileOutputStream foStream=new FileOutputStream(file);
                foStream.write(sbBuilder.toString().getBytes());
                foStream.close();
                Toast.makeText(this, "备份成功", Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(this, "备份失败", Toast.LENGTH_LONG).show();
            }
    
    }
    public void backupSMS2(View view){
        try {
            XmlSerializer serializer=Xml.newSerializer();//序列化器
            File file=new File(Environment.getExternalStorageDirectory(),"backup2.xml");
            FileOutputStream os=new FileOutputStream(file);
            serializer.setOutput(os, "utf-8");
            serializer.startDocument("utf-8", true);
            serializer.startTag(null, "smss");
            
            for(smsInfo info:smsInfos){
                serializer.startTag(null, "sms");
                serializer.attribute(null, "id", info.getId()+"");
                
                serializer.startTag(null, "body");
                serializer.text(info.getBody());
                serializer.endTag(null, "body");
                
                serializer.startTag(null, "address");
                serializer.text(info.getAddress());
                serializer.endTag(null, "address");
                
                serializer.startTag(null, "date");
                serializer.text(info.getTime()+"");
                serializer.endTag(null, "date");
                
                serializer.startTag(null, "type");
                serializer.text(info.getType()+"");
                serializer.endTag(null, "type");
                serializer.endTag(null, "sms");
            }
            
            serializer.endTag(null, "smss");
            serializer.endDocument();
            
            os.close();
            Toast.makeText(this, "备份成功", Toast.LENGTH_LONG).show();
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(this, "备份失败", Toast.LENGTH_LONG).show();
        
        }
    }
    

}


package com.example.genXML.domain;

public class smsInfo {
    
    private long time;
    private int type;
    private String body;
    private String address;
    private int id;
    
    
    public smsInfo() {
        
    }


    public smsInfo(long time, int type, String body, String address,int id) {
        super();
        this.time = time;
        this.type = type;
        this.body = body;
        this.address = address;
        this.id=id;
        
    }


    public long getTime() {
        return time;
    }


    public void setTime(long time) {
        this.time = time;
    }


    public int getType() {
        return type;
    }


    public void setType(int type) {
        this.type = type;
    }


    public String getBody() {
        return body;
    }


    public void setBody(String body) {
        this.body = body;
    }


    public String getAddress() {
        return address;
    }


    public void setAddress(String address) {
        this.address = address;
    }    
    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }
}





0 0
原创粉丝点击