8.读取外部存储文件

本文介绍了不同Android版本中SD卡路径的变化,并提供了通过Environment类获取SD卡路径的方法。此外,还展示了如何判断SD卡的状态并进行读写操作的示例代码。

SD卡的路径:

  • 2.2之前,sd卡路径:sdcard
  • 4.3之前,sd卡路径:mnt/sdcard
  • 4.3开始,sd卡路径:storage/sdcard

Environment.getExternalStorageDirectory()获取存储卡的路径

有4种状态:

  • MEDIA_UNKNOWN:不能识别sd卡
  • MEDIA_REMOVED:没有sd卡
  • MEDIA_UNMOUNTED:SD卡存在但是没有挂载
  • MEDIA_CHECKING:sb卡正在准备

MEDIA_MOUNTED:sd卡已经挂载,可以用

使用之前最好判断一下sd卡是否挂载了,然后再去对sd卡进行读写

if(Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED))

示例代码

package com.ldw.rwinrom;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.ldw.apirwoutrom.R;

public class MainActivity extends Activity {

    private EditText et_name;
	private EditText et_pass;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        et_name = (EditText) findViewById(R.id.et_name);
    	et_pass = (EditText) findViewById(R.id.et_pass);
        read();
    }
    
    //读取文件
    public void read(){
    	//使用api读取路径
    	 //File file = new File("sdcard/12.txt");
    	 File file = new File(Environment.getExternalStorageDirectory(),"123.txt");
    	 if(file.exists()){
	    	 try {
	    		 
				FileInputStream fis = new FileInputStream(file);
				//把字节流转换成字符流
				BufferedReader br = new BufferedReader(new InputStreamReader(fis));
				//读取txt里面的数据,readLine可以读取一行数据
				String text = br.readLine();
				String[] s = text.split("==");
		    	
		    	et_name.setText(s[0]);
		    	et_pass.setText(s[1]);
		    	fis.close();
		    	br.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 
    	 }
    }

    //点击登陆写文件
    public void login(View v){
    	
    	CheckBox cb = (CheckBox) findViewById(R.id.cb);
    	String name = et_name.getText().toString();
    	String password = et_pass.getText().toString();
    	
    	if(cb.isChecked()){
    		//data/data/com.ldw.rwinrom:存储空间的路径
    		//File file = new File("sdcard/12.txt");
    		File file = new File(Environment.getExternalStorageDirectory(),"123.txt");
    		
    		try {
    			FileOutputStream fos = new FileOutputStream(file);
				fos.write((name + "==" + password).getBytes());
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	}
    	
    	Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
    	
    }
    
    
}

 

 

 

### 如何在编程中读取外部数据 在编程中读取外部数据是一个常见的任务,通常涉及文件、数据库和API等多种数据源。以下将详细介绍如何从这些数据源中读取数据。 #### 1.文件读取数据 文件存储数据的最基本形式之一。根据文件类型的不同(如文本文件、CSV文件、JSON文件等),读取方式也会有所不同。 - **文本文件**:可以使用内置的文件操作函数来读取。 ```python with open("example.txt", "r") as file: data = file.read() ``` [^3] - **CSV文件**:可以使用`csv`模块来解析结构化的表格数据。 ```python import csv with open("example.csv", newline='') as csvfile: reader = csv.reader(csvfile) for row in reader: print(row) ``` [^4] - **JSON文件**:可以使用`json`模块加载JSON格式的数据。 ```python import json with open("example.json", "r") as jsonfile: data = json.load(jsonfile) ``` [^5] #### 2. 从数据库中读取数据 数据库是存储结构化数据的主要方式之一。为了连接并查询数据库,通常需要使用数据库驱动程序或ORM框架。 - **使用DB API 2.0**:Python中的数据库模块通常遵循DB API 2.0标准[^2]。例如,连接MySQL数据库: ```python import mysql.connector connection = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) cursor = connection.cursor() cursor.execute("SELECT * FROM your_table") rows = cursor.fetchall() for row in rows: print(row) cursor.close() connection.close() ``` [^6] - **使用ORM框架**:如SQLAlchemy,可以简化数据库操作。 ```python from sqlalchemy import create_engine, MetaData, Table, select engine = create_engine("mysql+pymysql://user:password@localhost/yourdatabase") metadata = MetaData(bind=engine) table = Table("your_table", metadata, autoload=True) stmt = select([table]) with engine.connect() as conn: result = conn.execute(stmt) for row in result: print(row) ``` [^7] #### 3. 从API中读取数据 API是现代应用程序之间通信的主要方式。通常通过HTTP请求与API交互,获取JSON或其他格式的数据。 - **使用`requests`库**:这是一个流行的HTTP客户端库,用于发送GET、POST等请求。 ```python import requests response = requests.get("https://api.example.com/data") if response.status_code == 200: data = response.json() print(data) else: print("Failed to retrieve data") ``` [^8] ### 数据处理中的ETL过程 在实际应用中,尤其是涉及多个数据源时,可能需要执行ETL(Extract, Transform, Load)过程[^1]。这包括: - **提取**:从各种数据源中获取原始数据。 - **转换**:将数据标准化为统一的格式。 - **加载**:将处理后的数据存储到目标位置(如数据仓库)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值