`
cxq890521
  • 浏览: 1305 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

六、把文件存放在SDCard

阅读更多

 

六、把文件存放在SDCard

使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移动硬盘或U盘。

 

在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:
mksdcard 2048M D:\AndroidTool\sdcard.img

 

注意:在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

           
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
         File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录
         File saveFile = new File(sdCardDir, “ljq.txt”);
         FileOutputStream outStream = new FileOutputStream(saveFile);
         outStream.write("abc".getBytes());
         outStream.close();
}
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,

那么方法返回的状态等于Environment.MEDIA_MOUNTED。

Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:
File sdCardDir = new File("/mnt/sdcard"); //获取SDCard目录
File saveFile = new File(sdCardDir, "ljq.txt"); 
//上面两句代码可以合成一句: File saveFile = new File("/mnt/sdcard/ljq.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("abc".getBytes());
outStream.close();

 

案例

main.xml布局文件

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <!-- 相对布局 -->
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"> 
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="@string/filename"
            android:id="@+id/filenameLable" />
        <EditText android:layout_width="250px"
            android:layout_height="wrap_content" 
            android:layout_toRightOf="@id/filenameLable"
            android:layout_alignTop="@id/filenameLable"
            android:layout_marginLeft="10px"
            android:text="ljq.txt"
            android:id="@+id/filename" />
    </RelativeLayout>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/content" />
    <EditText android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minLines="3"
        android:id="@+id/content" />
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"> 
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button" 
            android:id="@+id/button" />
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/button"
            android:layout_alignTop="@id/button"
            android:layout_marginLeft="10px"
            android:minLines="3"
            android:text="@string/readButton"
            android:id="@+id/readButton" />
    </RelativeLayout>
     <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:id="@+id/resultView" />
</LinearLayout>
 

 

 

strings.xml

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, FileActivity!</string>
    <string name="app_name">数据保存</string>
    <string name="filename">文件名称</string>
    <string name="content">文件内容</string>
    <string name="button">保存</string>
    <string name="readButton">读取内容</string>
    <string name="error">保存失败</string>
    <string name="success">保存成功</string>
</resources>
 

 

 

FileService工具类

 

package com.ljq.service;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class FileService {

    /**
     * 保存数据
     * 
     * @param outputStream
     * @param content
     * @throws Exception
     */
    public static void save(OutputStream outputStream, String content) throws Exception {
        outputStream.write(content.getBytes());
        outputStream.close();
    }

    /**
     * 读取数据
     * 
     * @param inputStream
     * @return
     * @throws Exception
     */
    public static String read(InputStream inputStream) throws Exception {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 往内存写数据
        byte[] buffer = new byte[1024]; // 缓冲区
        int len = -1;
        while ((len = inputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, len);
        }
        byte[] data = byteArrayOutputStream.toByteArray(); // 存储数据
        byteArrayOutputStream.close();
        inputStream.close();
        return new String(data);
    }
}
 

 

 

SdcardActivity类

 

package com.ljq.sdcard;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.ljq.service.FileService;

public class SdcardActivity extends Activity {
    private final String TAG = "FileActivity";
    private EditText filenameText;
    private TextView resultView;
    private EditText contentText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        filenameText = (EditText)this.findViewById(R.id.filename);
        contentText = (EditText)this.findViewById(R.id.content);
        resultView = (TextView)this.findViewById(R.id.resultView);
        Button button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(listener);
        Button readButton = (Button)this.findViewById(R.id.readButton);
        readButton.setOnClickListener(listener);
    }
    
    private View.OnClickListener listener = new View.OnClickListener() {

        public void onClick(View v) {
            Button button = (Button) v;
            String filename = filenameText.getText().toString();
            // Environment.getExternalStorageDirectory()等价于new File("/sdcard")---->获取sdcard目录
            //获取sdcard目录
            //File file = new File("/sdcard" + filename);
            File file = new File(Environment.getExternalStorageDirectory(), filename);
            switch (button.getId()) {
            case R.id.button:
                int resId = R.string.success; // 默认成功
                String content = contentText.getText().toString();
                //sdcard存在并且可以读写
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                    try {
                        FileOutputStream fileOutputStream = new FileOutputStream(file);
                        FileService.save(fileOutputStream, content);
                    } catch (Exception e) {
                        Log.e(TAG, e.toString());
                        resId = R.string.error;
                    }
                    Toast.makeText(SdcardActivity.this, resId, Toast.LENGTH_LONG).show();
                }else {
                    Toast.makeText(SdcardActivity.this, "sdcard不存在或写保护", Toast.LENGTH_LONG).show();
                }
                break;
            case R.id.readButton:
                try {
                        InputStream inputStream= new FileInputStream(file);
                        String text = FileService.read(inputStream);
                        resultView.setText(text);
                    } catch (Exception e) {
                        Log.e(TAG, e.toString());
                        Toast.makeText(SdcardActivity.this, "读取失败", Toast.LENGTH_LONG).show();
                    } 
                break;
            }
        }

    };
}
 

 

 

清单文件

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ljq.sdcard" android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon"
        android:label="@string/app_name">
        <activity android:name=".SdcardActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />
    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission
        android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

</manifest>

 

 

运行结果

 

 

 

 转载:http://www.cnblogs.com/linjiqin/archive/2011/05/13/2045634.html

 

分享到:
评论

相关推荐

    android webview实现自身下载文件自动保存SDCARD

    而“android webview实现自身下载文件自动保存SDCARD”这个话题则涉及到如何在WebView中处理文件下载,并且让这些文件自动保存到设备的外部存储(通常是SDCARD)中,而且整个过程对用户来说是透明的,即静默下载。...

    安卓模拟器sdcard.img文件打开修改

    在Android开发或者测试过程中,有时候我们需要对安卓模拟器的存储空间进行操作,比如添加应用程序、媒体文件等。这时,就需要了解如何打开并修改安卓模拟器的`sdcard.img`文件。`sdcard.img`文件是Android模拟器中...

    安卓SD卡文件管理更新信息相关-无需权限将文件保存到sdcard或应用缓存文件中.rar

    标题"安卓SD卡文件管理更新信息相关-无需权限将文件保存到sdcard或应用缓存文件中.rar"表明这是一个关于如何在不获取额外权限的情况下,将文件保存到SD卡或应用缓存文件夹的教程或代码示例集合。 首先,我们来了解...

    无需权限将文件保存到sdcard或应用缓存文件中

    通常,保存文件到外部存储(如SD卡)或内部存储(应用缓存文件)需要相应的权限,但在某些情况下,开发者可以采取特定的方式来实现“无需权限”地将文件保存到这些位置。下面我们将详细探讨这个主题。 一、Android...

    从SDCard中读取文本内容

    step 1:首先在程序的assets文件夹下存放一个test.txt文件,文件是utf-8编码格式,里面存放的是一篇文章。windows下生成的记事本默认是ANSI编码格式,你只需要点击 文件 --&gt; 另存为 --&gt; 在弹出框中把编码格式...

    sdcard文件读写案例-ES文件浏览器

    以下是关于"sdcard文件读写案例-ES文件浏览器"的相关知识点: 1. **SD卡访问权限**:在Android 6.0(API级别23)及以上版本,应用需要动态获取读写SD卡的权限。用户在首次运行应用时会被询问是否授予`READ_EXTERNAL...

    播放SDcard的全部音频文件.

    音频文件通常存放在`/storage/emulated/0/Music`或`/storage/emulated/0/Download`等目录下。 2. **多媒体文件处理**:播放音频文件需要使用Android的多媒体框架,主要包括`MediaPlayer`类。它提供了播放音频和视频...

    Android文件读写包含SDCard

    本篇将重点讲解如何在Android中进行文件读写,包括对内部存储和外部存储(即SDCard)的操作。 首先,了解Android的存储体系至关重要。Android设备有两种主要的存储类型:内部存储和外部存储。内部存储通常用于应用...

    Android读取assets与sdcard中的ini文件与图片

    `assets`目录是Android应用资源的一部分,它允许开发者存放任意格式的文件,不经过编译即可在运行时访问。下面是如何读取assets目录下ini文件的步骤: 1. **创建ini文件**:在你的`src/main/assets`目录下创建一个...

    Android写入SDCard

    在这个例子中,我们首先通过`Environment.getExternalStorageDirectory()`方法获取SDCard的根目录,然后创建一个`File`对象表示要保存的文件,并通过`FileOutputStream`对象将其写入到SDCard中。 #### 六、注意事项...

    在SDcard里新建一个文件和文件夹并修改权限apk源码

    不过,你可以通过一些间接方式来控制文件的访问权限,例如,创建文件时使用特定的文件描述符,或者将文件保存在应用私有的存储区域。 在Android 10 (API level 29)及以上版本,Google引入了Scoped Storage,限制了...

    拍照并保存到SDCard

    具体功能:将拍摄的照片保存到SDcard中 具体需求: 1.图片名保存格式:图片名称_手机型号_随机4位数.jpg 2.将图片分解,压缩,显示 3.写入SDCard卡保存 具体实现: 1.定义布局文件 2.编写业务代码

    android中把文件保存到sdcard代码实例

    在Android应用开发中,将文件保存到SD卡(外部存储)是常见的需求,特别是在处理大文件或需要持久化数据时。以下是一个详细的关于如何在Android中将文件保存到SD卡的代码实例。 首先,确保你的AndroidManifest.xml...

    android模拟器中使用SDCard

    其中SD卡(Secure Digital Card,简称SDCard)在Android设备中主要用作存储扩展,它可以用来存放各种数据文件,比如图片、音乐和视频等。在Android模拟器中模拟SD卡的使用主要包含以下几个方面知识点: 首先,了解...

    android中sdcard的读写.doc

    - 其中,“2048M”表示SDCard的大小为2GB,“D:\AndroidTool\sdcard.img”表示镜像文件的存放路径。 2. **访问SDCard的权限配置**: - 在AndroidManifest.xml文件中添加必要的权限声明。 - 创建与删除文件权限:...

    Android 平台上SDCard的自动mount的解决方法

    本文将根据提供的文件标题、描述、标签以及部分内容,详细介绍如何在Android平台上实现SDCard的自动mount。 #### 确保SDCard驱动正常编译和使用 首先,确保SDCard的驱动程序已正确编译并且能够在Android设备上正常...

    Android数据存储之Sdcard

    Sdcard(Secure Digital Card)是Android设备常用的外部存储器,用于存放大量的非敏感数据,如媒体文件、应用缓存等。本篇文章将深入探讨Android如何在Sdcard上进行数据存储,并通过一个简单的示例来说明。 首先,...

Global site tag (gtag.js) - Google Analytics