android中讀寫SD Card檔案

來源:互聯網
上載者:User

1. 使用mksdcard命令建立一個名為 sdcard.img的128M(M需大寫)SD卡鏡像。
mksdcard 128M sdcard.img
2.把sdcard.img拷貝到D:\projects2下,在Eclipse中的Run Configuration對話方塊中設定啟動參數。
-sdcard D:\projects2\sdcard.img

這樣SD Card就可用了。
3.sdcard中加入內容 
adb push E:\Xunlei\give.mp3 /sdcard/give.mp3。
4.應用程式中對檔案的讀寫

注意如果在應用程式中要對SD card進行寫操作的話,

需要加上androi許可權android.permission.WRITE_EXTERNAL_STORAGE

如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
執行個體1:
        Button button6 = (Button) findViewById(R.id.Button06);

        OnClickListener listener6 = new OnClickListener() {

            @Override
            public void onClick(View v) {
                createSDFile();
            }
        };
        button6.setOnClickListener(listener6);
        Button button7 = (Button) findViewById(R.id.Button07);
        OnClickListener listener7 = new OnClickListener() {
            @Override
            public void onClick(View v) {
                writeSDFile(kFileName);
            }
        };
        button7.setOnClickListener(listener7);
        
        Button button8 = (Button) findViewById(R.id.Button08);
        OnClickListener listener8 = new OnClickListener() {
            @Override
            public void onClick(View v) {
                readSDFile(kFileName);
            }
        };
        button8.setOnClickListener(listener8);

        

    String kFileName="/sdcard/uad2/test.txt";

    void createSDFile()

    {

        createSDFile(kFileName);

    }

    final static String kSdCardRoot="sdcard";

    void createSDFile(String fileFullName)

    {

        if(fileFullName.charAt(0)=='/')
            fileFullName=fileFullName.substring(1, fileFullName.length());
        String name[]=fileFullName.split("/");
        if(name==null||name.length<2)

            return;

        if(!name[0].equals(kSdCardRoot))

        {

            Log.i(tag,fileFullName+" is not a file"+name[0]);

            return;

        }

        File sdDir=new File("/"+kSdCardRoot);

        if(!sdDir.exists())

        {

            Log.i(tag, "SD card is not exists");

            return;

        }

        if(!sdDir.canWrite())

        {

            Log.i(tag, sdDir.length()+"SD card can not be wrote"+sdDir.canRead());

            return;

        }

        File dir=sdDir;

        for(int i=1;i<name.length-1;i++)

        {

            dir=new File(dir.getAbsolutePath()+"/"+name[i]);

            if(dir.exists())

                continue;

            boolean res=dir.mkdir();

            if(!res)

            {

                Log.i(tag, "create dir:"+res+" fail"+name[i]);

                return;

            }

        }

        String fileName=name[name.length-1].trim();

        if(fileName.length()>0)

        {

            File file=new File(dir.getAbsolutePath()+"/"+name[name.length-1]);

            if(!file.exists())

            {

                try{

                    file.createNewFile();

                }catch(IOException e)

                {

                    Log.e(tag, "creat File erro:",e);

                }

            }

        }

    }

    void writeSDFile(String fileName)

    {
        File file=new File(fileName);

        if(!file.exists())

            createSDFile(fileName);

        if(!file.canWrite())

        {

            Log.i(tag,"file:"+file.getAbsoluteFile()+" can not to be wrote");

            return;

        }

        String content="hello:"+System.currentTimeMillis();

        FileOutputStream os=null;

        try{

            os=new FileOutputStream(file);

            os.write(content.getBytes());

            Log.i(tag, "write:"+content);

        }

        catch(IOException e)

        {

            Log.e(tag, "write file",e);

        }

        finally
        {
            if(os!=null)
            {
                try{
                os.flush();
                os.close();
                }catch(IOException e)
                {
                    Log.e(tag, "close file",e);
                }
            }
        }

    }

    void readSDFile(String fileName)

    {
        String content;

        FileInputStream is=null;

        File file=new File(fileName);

        if(!file.exists())

        {

            Log.i(tag,file.getAbsolutePath()+" is not exists");

            return;
        }
        if(!file.canRead())

        {

            Log.i(tag,file.getAbsolutePath()+" can not be read");

            return;
        }        
        try{

            is=new FileInputStream(file);

            byte buffer[]=new byte[is.available()];

            is.read(buffer);

            content=new String(buffer);

            Log.i(tag, "read SD file:"+content);

            //InputStreamReader inReader = new InputStreamReader(is); 
        }
        catch(IOException e)

        {

            Log.e(tag, "write file",e);

        }

        finally
        {
            if(is!=null)
            {
                try{
                is.close();
                }catch(IOException e)
                {
                    Log.e(tag, "close file",e);
                }
            }
        }        

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.