Android读写文件正确实行方法介绍

来源:互联网 发布:淘宝如何退货 编辑:程序博客网 时间:2024/04/30 14:44
Android开源手机操作系统可以让开发人员在模拟器中进行相应的操作以使系统满足用户的各种需求。在这里我们可以通过对Android读写文件的相关操作来体验一下这款操作系统的编写方式。

众所周知Android有一套自己的安全模型, 具体可参见Android开发文档。当应用程序(.apk)在安装时就会分配一个userid,当该应用要去访问其他资源比如文件的时候,就需要 userid匹配。默认情况下 ,任何应用创建的文件,数据库, sharedpreferences都应该是私有的(位于/data/data/your_project/files/),其余程序无法访问。除非在创 建时指明是MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE,只要这样其余程序才能正确访问。

因为有这种Android读写文件的方法在安全上有所保障,进程打开文件时Android要求检查进程的user id。所以不能直接用java的api来打开,因为java的io函数没有提这个机制 。

无法用java的api直接打开程序私有的数据 ,默认路径为/data/data/your_project/files/

  1. FileReader file = new FileReader("Android.txt"); 

这里特别强调私有数据!言外之意是如果某个文件或者数据不是程序私有的,既访问它时无须经过Android的权限检查,那么还是可以用java的io api来直接访问的。所谓的非私有数据是只放在sdcard上的文件或者数据,

可以用java的io api来直接打开sdcard上文件。

  1. FileReader file = new FileReader("/sdcard/Android.txt"); 

如果要打开程序自己私有的文件和数据,那必须使用Activity提供openFileOutput和openFileInput方法。

创建程序私有的文件,由于权限方面的要求,必须使用activity提供的Android读写文件方法

  1. FileOutputStream os = this.openFileOutput("Android.txt", MODE_PRIVATE);  
  2. OutputStreamWriter outWriter = new OutputStreamWriter (os); 

读取程序私有的文件,由于权限方面的要求,必须使用activity提供的方法

  1. FileInputStream os =this.openFileInput("Android.txt");  
  2. InputStreamReader inReader = new InputStreamReader(os); 

Android读写文件的相关操作就为大家介绍到这里。


 Android入门之文件系统操作(一)简单的文件浏览器 2011-11-25 17:12:31

分类: Java

      


  1. 1. import java.io.File; 
  2.    2. import java.util.*; 
  3.    3. 
  4.    4. import android.app.Activity; 
  5.    5. import android.content.Context; 
  6.    6. import android.os.*; 
  7.    7. import android.view.*; 
  8.    8. import android.widget.*; 
  9.    9. import android.widget.AdapterView.OnItemClickListener; 
  10.   10. import android.widget.ImageView.ScaleType; 
  11.   11. 
  12.   12. public class FileBrowser extends Activity { 
  13.   13. 
  14.   14. private ListView mainListView=null; 
  15.   15. private List<Map<String,Object>> list=null; 
  16.   16. 
  17.   17. public void onCreate(Bundle savedInstanceState) { 
  18.   18. super.onCreate(savedInstanceState); 
  19.   19. this.setTitle("文件浏览器"); 
  20.   20. mainListView=new ListView(this); 
  21.   21. setContentView(mainListView); 
  22.   22. 
  23.   23. File file=Environment.getRootDirectory(); 
  24.   24. String pathx=file.getAbsolutePath(); 
  25.   25. this.setTitle(pathx); 
  26.   26. //android的总目录就是"/" 
  27.   27. list_init("/"); 
  28.   28. } 
  29.   29. 
  30.   30. void list_init(String path){ 
  31.   31. File file=new File(path); 
  32.   32. File[] fileList=file.listFiles(); 
  33.   33. list=new ArrayList<Map<String,Object>>(); 
  34.   34. Map<String,Object> item; 
  35.   35. item=new HashMap<String,Object>(); 
  36.   36. if(path.equals("/")){ 
  37.   37. item.put("ico",R.drawable.home); 
  38.   38. item.put("name","总目录列表"); 
  39.   39. item.put("path","/"); 
  40.   40. list.add(item); 
  41.   41. }else{ 
  42.   42. item.put("ico",R.drawable.back); 
  43.   43. item.put("name","返回上一级"); 
  44.   44. item.put("path",file.getParent()); 
  45.   45. list.add(item); 
  46.   46. } 
  47.   47. for(int i=0;i<fileList.length;i++){ 
  48.   48. item=new HashMap<String,Object>(); 
  49.   49. if(fileList[i].isDirectory()){ 
  50.   50. if(fileList[i].list().length<1){ 
  51.   51. item.put("ico",R.drawable.file1); 
  52.   52. }else{ 
  53.   53. item.put("ico",R.drawable.file2); 
  54.   54. } 
  55.   55. }else{ 
  56.   56. item.put("ico",R.drawable.content); 
  57.   57. } 
  58.   58. item.put("name",fileList[i].getName()); 
  59.   59. item.put("path",fileList[i].getAbsolutePath()); 
  60.   60. list.add(item); 
  61.   61. } 
  62.   62. MyAdapter ma=new MyAdapter(this,list); 
  63.   63. //mainListView=new ListView(this); 
  64.   64. mainListView.setAdapter(ma); 
  65.   65. mainListView.setOnItemClickListener(new OnItemClickListener(){ 
  66.   66. public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
  67.   67. if(arg2>&& (Integer)(list.get(arg2).get("ico"))==R.drawable.content){ 
  68.   68. //非文件夹图标,点击无效 
  69.   69. }else{ 
  70.   70. //打开下一级文件目录列表 
  71.   71. list_init((String)(list.get(arg2).get("path"))); 
  72.   72. } 
  73.   73. } 
  74.   74. }); 
  75.   75. this.setTitle(path); 
  76.   76. } 
  77.   77. 
  78.   78. public class MyAdapter extends BaseAdapter{ 
  79.   79. 
  80.   80. Context context=null; 
  81.   81. List<Map<String,Object>> list=null; 
  82.   82. 
  83.   83. MyAdapter(Context context,List<Map<String,Object>> list){ 
  84.   84. this.context=context; 
  85.   85. this.list=list; 
  86.   86. } 
  87.   87. public int getCount() {return list.size();} 
  88.   88. public Object getItem(int position) {return position;} 
  89.   89. public long getItemId(int position) {return position;} 
  90.   90. 
  91.   91. public View getView(int position, View convertView, ViewGroup parent) { 
  92.   92. LinearLayout returnView=new LinearLayout(context); 
  93.   93. returnView.setLayoutParams(new ListView.LayoutParams(-1,-2));//注意:ListView.LayoutParams 
  94.   94. //图标 
  95.   95. ImageView iv=new ImageView(context); 
  96.   96. LinearLayout.LayoutParams lp_iv=new LinearLayout.LayoutParams(-2,-2); 
  97.   97. lp_iv.rightMargin=10; 
  98.   98. iv.setLayoutParams(lp_iv); 
  99.   99. iv.setScaleType(ScaleType.CENTER_INSIDE); 
  100.  100. iv.setImageResource((Integer)((list.get(position)).get("ico"))); 
  101.  101. returnView.addView(iv); 
  102.  102. //文件名 
  103.  103. TextView name=new TextView(context); 
  104.  104. LinearLayout.LayoutParams lp_tv=new LinearLayout.LayoutParams(-2,-2); 
  105.  105. name.setLayoutParams(lp_tv); 
  106.  106. name.setTextSize(name.getTextSize()+10); 
  107.  107. name.setText((String)(list.get(position).get("name"))); 
  108.  108. returnView.addView(name); 
  109.  109. // 
  110.  110. return returnView; 
  111.  111. } 
  112.  112. 
  113.  113. } 
  114.  114. }
 Android入门之文件系统操作(二)文件操作相关指令 2011-11-24 17:31:46

分类: Java

(一)获取总根
view plainprint?
  1. File[] fileList=File.listRoots();  
  2. //返回fileList.length为1  
  3. //fileList.getAbsolutePath()为"/"  
  4. //这就是系统的总根  
File[] fileList=File.listRoots(); //返回fileList.length为1 //fileList.getAbsolutePath()为"/" //这就是系统的总根

(二)打开总根目录

view plainprint?
  1. File file=new File("/");  
  2. File[] fileList=file.listFiles();  
  3. //获取的目录中除了"/sdcard"和"/system"还有"/data"、"/cache"、"/dev"等  
  4. //Android的根目录并不像Symbian系统那样分为C盘、D盘、E盘等  
  5. //Android是基于Linux的,只有目录,无所谓盘符  
File file=new File("/"); File[] fileList=file.listFiles(); //获取的目录中除了"/sdcard"和"/system"还有"/data"、"/cache"、"/dev"等 //Android的根目录并不像Symbian系统那样分为C盘、D盘、E盘等 //Android是基于Linux的,只有目录,无所谓盘符

(三)获取系统存储根目录

view plainprint?
  1. File file=Environment.getRootDirectory();//File file=new File("/system");  
  2. File[] fileList=file.listFiles();  
  3. //这里说的系统仅仅指"/system"  
  4. //不包括外部存储的手机存储的范围远远大于所谓的系统存储  
File file=Environment.getRootDirectory();//File file=new File("/system"); File[] fileList=file.listFiles(); //这里说的系统仅仅指"/system" //不包括外部存储的手机存储的范围远远大于所谓的系统存储

(四)获取SD卡存储根目录

view plainprint?
  1. File file=Environment.getExternalStorageDirectory();//File file=new File("/sdcard");  
  2. File[] fileList=file.listFiles();  
  3. //要获取SD卡首先要确认SD卡是否装载  
  4. boolean is=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);  
  5. //如果true,则已装载  
  6. //如果false,则未装载  
File file=Environment.getExternalStorageDirectory();//File file=new File("/sdcard"); File[] fileList=file.listFiles(); //要获取SD卡首先要确认SD卡是否装载 boolean is=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); //如果true,则已装载 //如果false,则未装载

(五)获取data根目录

view plainprint?
  1. File file=Environment.getDataDirectory();//File file=new File("/data");  
  2. File[] fileList=file.listFiles();  
  3. //由于data文件夹是android里一个非常重要的文件夹,所以一般权限是无法获取到文件的,即fileList.length返回为0  
File file=Environment.getDataDirectory();//File file=new File("/data"); File[] fileList=file.listFiles(); //由于data文件夹是android里一个非常重要的文件夹,所以一般权限是无法获取到文件的,即fileList.length返回为0

(六)获取私有文件路径

view plainprint?
  1. Context context=this;//首先,在Activity里获取context  
  2. File file=context.getFilesDir();  
  3. String path=file.getAbsolutePath();  
  4. //此处返回的路劲为/data/data/包/files,其中的包就是我们建立的主Activity所在的包  
  5. //我们可以看到这个路径也是在data文件夹下  
  6. //程序本身是可以对自己的私有文件进行操作  
  7. //程序中很多私有的数据会写入到私有文件路径下,这也是android为什么对data数据做保护的原因之一  
Context context=this;//首先,在Activity里获取context File file=context.getFilesDir(); String path=file.getAbsolutePath(); //此处返回的路劲为/data/data/包/files,其中的包就是我们建立的主Activity所在的包 //我们可以看到这个路径也是在data文件夹下 //程序本身是可以对自己的私有文件进行操作 //程序中很多私有的数据会写入到私有文件路径下,这也是android为什么对data数据做保护的原因之一

(七)获取文件(夹)绝对路径、相对路劲、文件(夹)名、父目录

view plainprint?
  1. File file=……  
  2. String relativePath=file.getPath();//相对路径  
  3. String absolutePath=file.getAbsolutePath();//绝对路径  
  4. String fileName=file.getName();//文件(夹)名  
  5. String parentPath=file.getParent();//父目录  
File file=…… String relativePath=file.getPath();//相对路径 String absolutePath=file.getAbsolutePath();//绝对路径 String fileName=file.getName();//文件(夹)名 String parentPath=file.getParent();//父目录

(八)列出文件夹下的所有文件和文件夹

view plainprint?
  1. File file=……  
  2. File[] fileList=file.listFiles();  
File file=…… File[] fileList=file.listFiles();

(九)判断是文件还是文件夹

view plainprint?
  1. File file=……  
  2. boolean is=file.isDirectory();//true-是,false-否  
File file=…… boolean is=file.isDirectory();//true-是,false-否

(十)判断文件(夹)是否存在

view plainprint?
  1. File file=……  
  2. boolean is=file.exists();//true-是,false-否  
File file=…… boolean is=file.exists();//true-是,false-否

(十一)新建文件(夹)

view plainprint?
  1. File file=……  
  2. oolean is=file.isDirectory();//判断是否为文件夹  
  3. /*方法1*/  
  4. if(is){  
  5.     String path=file.getAbsolutePath();  
  6.     String name="ABC";//你要新建的文件夹名或者文件名  
  7.     String pathx=path+name;  
  8.     File filex=new File(pathx);  
  9.     boolean is=filex.exists();//判断文件(夹)是否存在  
  10.     if(!is){  
  11.         filex.mkdir();//创建文件夹  
  12.         //filex.createNewFile();//创建文件  
  13.     }  
  14. /*方法2*/  
  15. if(is){  
  16.     String path=file.getAbsolutePath();  
  17.     String name="test.txt";//你要新建的文件夹名或者文件名  
  18.     File filex=new File(path,name);//方法1和方法2的区别在于此  
  19.     boolean is=filex.exists();//判断文件(夹)是否存在  
  20.     if(!is){  
  21.         filex.mkdir();//创建文件夹  
  22.         //filex.createNewFile();//创建文件  
  23. }  
File file=…… oolean is=file.isDirectory();//判断是否为文件夹 /*方法1*/ if(is){ String path=file.getAbsolutePath(); String name="ABC";//你要新建的文件夹名或者文件名 String pathx=path+name; File filex=new File(pathx); boolean is=filex.exists();//判断文件(夹)是否存在 if(!is){ filex.mkdir();//创建文件夹 //filex.createNewFile();//创建文件 } /*方法2*/ if(is){ String path=file.getAbsolutePath(); String name="test.txt";//你要新建的文件夹名或者文件名 File filex=new File(path,name);//方法1和方法2的区别在于此 boolean is=filex.exists();//判断文件(夹)是否存在 if(!is){ filex.mkdir();//创建文件夹 //filex.createNewFile();//创建文件 }

(十二)重命名文件(夹)

view plainprint?
  1. File file=……  
  2. String parentPath=file.getParent();  
  3. String newName="name";//重命名后的文件或者文件夹名  
  4. File filex=new File(parentPath,newName);//File filex=new File(parentPaht+newName)  
  5. file.renameTo(filex);  
File file=…… String parentPath=file.getParent(); String newName="name";//重命名后的文件或者文件夹名 File filex=new File(parentPath,newName);//File filex=new File(parentPaht+newName) file.renameTo(filex);

(十三)删除文件(夹)

view plainprint?
  1. File file=……  
  2. file.delete();//立即删除  
  3. //file.deleteOnExit();//程序退出后删除,只有正常退出才会删除 


 Androlid入门之文件系统操作(三)文件读写 2011-11-25 17:21:56

分类: Java

     

  1. 1. import java.io.*; 
  2.    2. 
  3.    3. import android.app.Activity; 
  4.    4. import android.os.Bundle; 
  5.    5. import android.view.View; 
  6.    6. import android.view.View.OnClickListener; 
  7.    7. import android.widget.*; 
  8.    8. 
  9.    9. public class FileIOTest extends Activity { 
  10.   10. 
  11.   11. private LinearLayout mainView=null; 
  12.   12. private Button writeButton=null; 
  13.   13. private Button readButton=null; 
  14.   14. private TextView tv=null; 
  15.   15. 
  16.   16. public void onCreate(Bundle savedInstanceState) { 
  17.   17. super.onCreate(savedInstanceState); 
  18.   18. writeButton=new Button(this); 
  19.   19. writeButton.setText("文件写入"); 
  20.   20. writeButton.setOnClickListener(new OnClickListener(){ 
  21.   21. public void onClick(View v) { 
  22.   22. fileWrite(); 
  23.   23. } 
  24.   24. }); 
  25.   25. readButton=new Button(this); 
  26.   26. readButton.setEnabled(false); 
  27.   27. readButton.setText("文件读出"); 
  28.   28. readButton.setOnClickListener(new OnClickListener(){ 
  29.   29. public void onClick(View v) { 
  30.   30. fileRead(); 
  31.   31. } 
  32.   32. }); 
  33.   33. tv=new TextView(this); 
  34.   34. tv.setText("这里显示读出结果"); 
  35.   35. mainView=new LinearLayout(this); 
  36.   36. mainView.setOrientation(LinearLayout.VERTICAL); 
  37.   37. mainView.addView(writeButton); 
  38.   38. mainView.addView(readButton); 
  39.   39. mainView.addView(tv); 
  40.   40. setContentView(mainView); 
  41.   41. } 
  42.   42. /*文件写*/ 
  43.   43. void fileWrite(){ 
  44.   44. //File file=this.getFilesDir();//打开私有目录 
  45.   45. File file=new File("/sdcard"); 
  46.   46. String path=file.getAbsolutePath();//获取路径 
  47.   47. String name="mydata1.dat";//新建文件名 
  48.   48. File filex=new File(path,name); 
  49.   49. //如果文件不存在,则创建一个文件 
  50.   50. if(!filex.exists()){ 
  51.   51. try { 
  52.   52. filex.createNewFile(); 
  53.   53. } catch (IOException e) { 
  54.   54. e.printStackTrace(); 
  55.   55. } 
  56.   56. } 
  57.   57. //获取文件输出流 
  58.   58. FileOutputStream fos=null; 
  59.   59. try { 
  60.   60. fos=new FileOutputStream(filex); 
  61.   61. byte buf[]="Hello,这是Android入门之文件操作(三)文件读写!".getBytes(); 
  62.   62. //上面涉及到字符串转字符,为了保证编码正常,建议采用下面的方法 
  63.   63. //ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
  64.   64. //DataOutputStream dos=new DataOutputStream(baos); 
  65.   65. //try {dos.writeUTF("XXXXXXXXXXXXXXXXX");catch (IOException e1) {e1.printStackTrace();} 
  66.   66. //byte[] buf=baos.toByteArray(); 
  67.   67. try { 
  68.   68. fos.write(buf);//全面覆盖式的写,如果要添加或者修改,得把原来的先读出来再做处理 
  69.   69. fos.close(); 
  70.   70. } catch (IOException e) { 
  71.   71. e.printStackTrace(); 
  72.   72. } 
  73.   73. } catch (FileNotFoundException e) { 
  74.   74. e.printStackTrace(); 
  75.   75. } 
  76.   76. readButton.setEnabled(true); 
  77.   77. } 
  78.   78. /*文写读*/ 
  79.   79. void fileRead(){ 
  80.   80. //File file=this.getFilesDir();//打开私有目录 
  81.   81. File file=new File("/sdcard"); 
  82.   82. String path=file.getAbsolutePath();//获取路径 
  83.   83. String name="mydata1.dat";//新建文件名 
  84.   84. File filex=new File(path,name); 
  85.   85. // 
  86.   86. try { 
  87.   87. FileInputStream fis=new FileInputStream(filex); 
  88.   88. byte buf[]=new byte[1024]; 
  89.   89. try { 
  90.   90. int len=fis.read(buf); 
  91.   91. fis.close(); 
  92.   92. } catch (IOException e) { 
  93.   93. e.printStackTrace(); 
  94.   94. } 
  95.   95. //显示读取结果 
  96.   96. tv.setText(new String(buf)); 
  97.   97. //上面涉及字符转字符串,为了保证编码正常,建议采用下面的方法 
  98.   98. //ByteArrayInputStream bais=new ByteArrayInputStream(buf); 
  99.   99. //DataInputStream dis=new DataInputStream(bais); 
  100.  100. //try {tv.setText(dis.readUTF());} catch (IOException e) {e.printStackTrace();} 
  101.  101. } catch (FileNotFoundException e) { 
  102.  102. e.printStackTrace(); 
  103.  103. } 
  104.  104. } 
  105.  105. }

0 0
原创粉丝点击