当前位置: 代码迷 >> 综合 >> android中读写SD Card文件
  详细解决方案

android中读写SD Card文件

热度:0   发布时间:2024-01-19 19:50:17.0
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);
                }
            }
        }        
    }
  相关解决方案