String,StringBuffer与StringBuilder的区别&&Android之Android的数据存储--SD卡

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
 String S1 = “This is only a” + “ simple” + “ test”;
 StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
 你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
 String S1 = “This is only a” + “ simple” + “test”; 其实就是:
 String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做

在大部分情况下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder > StringBuffer
java.lang.StringBuilde
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。


Android也为我们提供了SDCard的一些相关操作。Environment这个类就可以实现这个功能。

Environmet类

常用常量

String MEDIA_MOUNTED

当前Android的外部存储器可读可写

String MEDIA_MOUNTED_READ_ONLY

当前Android的外部存储器只读

 

常用方法

方法名称

描述

public static File getDataDirectory ()

获得Android下的data文件夹的目录

public static File getDownloadCacheDirectory ()

获得Android Download/Cache 内容的目录

public static File getExternalStorageDirectory ()

获得Android外部存储器也就是SDCard的目录

public static String getExternalStorageState ()

获得Android外部存储器的当前状态

public static File getRootDirectory ()

获得Android下的root文件夹的目录

 

要想实现对SDCard的读取操作,只需要按以下几个步骤就行:

1、  先判断这台手机设备上是否有SDCard且具有读写SDCard的权限

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2、  调用Environment.getExternalStorageDirectory()获得到外部存储器的目录

3、  使用IO流对外部存储器进行文件的读写

4、  别忘记了要在AndroidMainfest.xml中添加权限哦

特别声明:以下操作必须要在如下权限下完成:

[html]  view plain copy print ?
  1. <!-- 在SDCard中创建与删除文件权限 -->  
  2.   
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  4.   
  5. <!-- 往SDCard中写入数据权限 -->  
  6.   
  7. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  


实例:读写SDCard上的文件

[java]  view plain copy print ?
  1. package com.jiahui.sdcarddemo;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.InputStream;  
  9. import java.io.OutputStream;  
  10. import java.io.RandomAccessFile;  
  11.   
  12. import android.app.Activity;  
  13. import android.os.Bundle;  
  14. import android.os.Environment;  
  15. import android.view.View;  
  16. import android.widget.Button;  
  17. import android.widget.EditText;  
  18. import android.widget.TextView;  
  19.   
  20. public class SDCardDemoActivity extends Activity {  
  21.   
  22.     private Button btnWrite, btnRead;  
  23.     private EditText edtContent;  
  24.     private TextView tvResult;  
  25.     private static final String FILE_NAME = "test.txt";  
  26.   
  27.     public void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         edtContent = (EditText) this.findViewById(R.id.edtContent);  
  31.         tvResult = (TextView) this.findViewById(R.id.tvResult);  
  32.   
  33.         btnRead = (Button) this.findViewById(R.id.btnRead);  
  34.         btnWrite = (Button) this.findViewById(R.id.btnWrite);  
  35.         btnWrite.setOnClickListener(new View.OnClickListener() {  
  36.             @Override  
  37.             public void onClick(View v) {  
  38.                 System.out.println("往SDCard里写数据");  
  39.                 // 先判断是否有SDCard  
  40.                 System.out.println("Environment.getExternalStorageState():"  
  41.                         + Environment.getExternalStorageState());  
  42.                 System.out.println("Environment.MEDIA_MOUNTED:"  
  43.                         + Environment.MEDIA_MOUNTED);  
  44.                 if (Environment.getExternalStorageState().equals(  
  45.                         Environment.MEDIA_MOUNTED)) {  
  46.   
  47.                     String content = edtContent.getText().toString();  
  48.   
  49.                     try {  
  50.   
  51.                         // 获取SDcard路径  
  52.                         File sdCardDir = Environment  
  53.                                 .getExternalStorageDirectory();  
  54.   
  55.                         // SDCard目录:/mnt/sdcard  
  56.                         String sdcardPath = sdCardDir.getAbsolutePath();  
  57.                         System.out.println("sdCardDir.getAbsolutePath()"  
  58.                                 + sdCardDir.getAbsolutePath());  
  59.   
  60.                         File file = new File(sdCardDir, FILE_NAME);  
  61.                         // File file = new File(sdcardPath  
  62.                         // + File.separator + FILE_NAME);  
  63.                         // 以指定文件创建RandomAccessFile对象  
  64.                         RandomAccessFile raf = new RandomAccessFile(file, "rw");  
  65.                         // 将文件记录指针移动最后  
  66.                         raf.seek(file.length());  
  67.                         // 输出文件内容  
  68.                         raf.write(content.getBytes());  
  69.                         raf.close();  
  70.   
  71.                     } catch (Exception e) {  
  72.                         // TODO: handle exception  
  73.                     }  
  74.                 }  
  75.             }  
  76.         });  
  77.         btnRead.setOnClickListener(new View.OnClickListener() {  
  78.   
  79.             @Override  
  80.             public void onClick(View v) {  
  81.   
  82.                 if (Environment.getExternalStorageState().equals(  
  83.                         Environment.MEDIA_MOUNTED)) {  
  84.                     // 获取SDcard路径  
  85.   
  86.                     StringBuilder sb = new StringBuilder();  
  87.                     try {  
  88.                         File sdCardDir = Environment  
  89.                                 .getExternalStorageDirectory();  
  90.                         File file = new File(sdCardDir, FILE_NAME);  
  91.   
  92.                         InputStream inputStream = new FileInputStream(file);  
  93.                         int len = 0;  
  94.                         byte[] buffer = new byte[1024];  
  95.                         while ((len = inputStream.read(buffer)) != -1) {  
  96.   
  97.                             sb.append(new String(buffer, 0, len));  
  98.                         }  
  99.                         tvResult.setText(sb.toString());  
  100.                         // 关闭流  
  101.                         inputStream.close();  
  102.   
  103.                     } catch (Exception e) {  
  104.                         // TODO Auto-generated catch block  
  105.                         e.printStackTrace();  
  106.                     }  
  107.                 }  
  108.   
  109.             }  
  110.         });  
  111.   
  112.     }  
  113. }  

实现效果

用File Explorer可以看到如下图一样的效果:

开发注意事项:

1、  一定不能忘记添加权限

[html]  view plain copy print ?
  1. <!-- 在SDCard中创建与删除文件权限 -->  
  2.   
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  4.   
  5. <!-- 往SDCard中写入数据权限 -->  
  6.   
  7. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  




android 文件操作小结:

在android中的文件放在不同位置,它们的读取方式也有一些不同。

一、资源文件的读取:

      1) 从resource的raw中读取文件数据:

01 String res = "";
02 try{
03   
04     //得到资源中的Raw数据流
05     InputStream in = getResources().openRawResource(R.raw.test);
06  
07     //得到数据的大小
08     intlength = in.available();      
09  
10     byte [] buffer = newbyte[length];       
11  
12     //读取数据
13     in.read(buffer);        
14  
15     //依test.txt的编码类型选择合适的编码,如果不调整会乱码
16     res = EncodingUtils.getString(buffer, "BIG5");
17      
18     //关闭   
19     in.close();           
20  
21    }catch(Exception e){
22       e.printStackTrace();        
23    }

 2) 从resource的asset中读取文件数据

01 String fileName = "test.txt"//文件名字
02 String res="";
03 try{
04  
05    //得到资源中的asset数据流
06    InputStream in = getResources().getAssets().open(fileName);
07  
08    intlength = in.available();        
09    byte [] buffer = newbyte[length];       
10  
11    in.read(buffer);           
12  
13    res = EncodingUtils.getString(buffer, "UTF-8");    
14  
15   }catch(Exception e){
16  
17       e.printStackTrace();        
18  
19    }

 

二、读写/data/data/<应用程序名>目录上的文件:

01 //写数据
02 public voidwriteFile(String fileName,String writestr{
03   try{
04  
05         FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);
06  
07         byte[] bytes = writestr.getBytes();
08  
09         fout.write(bytes);
10  
11         fout.close();
12       }
13  
14         catch(Exception e){
15         e.printStackTrace();
16        }
17 }
18  
19 //读数据
20 publicString readFile(String fileName){
21   String res="";
22   try{
23          FileInputStream fin = openFileInput(fileName);
24          intlength = fin.available();
25          byte [] buffer = newbyte[length];
26          fin.read(buffer);    
27          res = EncodingUtils.getString(buffer, "UTF-8");
28          fin.close();    
29      }
30      catch(Exception e){
31          e.printStackTrace();
32      }
33      returnres;
34  
35 }

三、读写SD卡中的文件。也就是/mnt/sdcard/目录下面的文件 :

01 //写数据到SD中的文件
02 public voidwriteFileSdcardFile(String fileName,String write_str){
03  try{
04  
05        FileOutputStream fout = newFileOutputStream(fileName);
06        byte[] bytes = write_str.getBytes();
07  
08        fout.write(bytes);
09        fout.close();
10      }
11  
12       catch(Exception e){
13         e.printStackTrace();
14        }
15    }
16  
17    
18 //读SD中的文件
19 publicString readFileSdcardFile(String fileName){
20   String res="";
21   try{
22          FileInputStream fin = newFileInputStream(fileName);
23  
24          intlength = fin.available();
25  
26          byte [] buffer = newbyte[length];
27          fin.read(buffer);    
28  
29          res = EncodingUtils.getString(buffer, "UTF-8");
30  
31          fin.close();    
32         }
33  
34         catch(Exception e){
35          e.printStackTrace();
36         }
37         returnres;
38 }

四、使用File类进行文件的读写:

01 //读文件
02 publicString readSDFile(String fileName) { 
03  
04         File file = newFile(fileName); 
05  
06         FileInputStream fis = newFileInputStream(file); 
07  
08         intlength = fis.available();
09  
10          byte [] buffer = newbyte[length];
11          fis.read(buffer);    
12  
13          res = EncodingUtils.getString(buffer, "UTF-8");
14  
15          fis.close();    
16          returnres; 
17
18  
19 //写文件
20 public voidwriteSDFile(String fileName, String write_str){ 
21  
22         File file = newFile(fileName); 
23  
24         FileOutputStream fos = newFileOutputStream(file); 
25  
26         byte[] bytes = write_str.getBytes();
27  
28         fos.write(bytes);
29  
30         fos.close();
31 }

五、另外,File还有下面一些常用的操作:

01 String Name = File.getName();  //获得文件或文件夹的名称:
02 String parentPath = File.getParent();  获得文件或文件夹的父目录
03 String path = File.getAbsoultePath();//绝对路经
04 String path = File.getPath();//相对路经
05 File.createNewFile();//建立文件 
06 File.mkDir(); //建立文件夹 
07 File.isDirectory(); //判断是文件或文件夹
08 File[] files = File.listFiles();  //列出文件夹下的所有文件和文件夹名
09 File.renameTo(dest);  //修改文件夹和文件名
10 File.delete();  //删除文件夹或文件

六、使用RandomAccessFile进行文件的读写:

RandomAccessFile的使用方法比较灵活,功能也比较多,可以使用类似seek的方式可以跳转到文件的任意位置,从文件指示器当前位置开始读写。
它有两种构造方法
new RandomAccessFile(f,"rw");//读写方式
new RandomAccessFile(f,"r");//只读方式
使用事例:

01 /*
02  * 程序功能:演示了RandomAccessFile类的操作,同时实现了一个文件复制操作。
03  */ 
04 packagecom.lwj.demo; 
05    
06 importjava.io.*; 
07    
08 public classRandomAccessFileDemo { 
09  public static void main(String[] args) throwsException { 
10   RandomAccessFile file = newRandomAccessFile("file""rw"); 
11   // 以下向file文件中写数据 
12   file.writeInt(20);// 占4个字节 
13   file.writeDouble(8.236598);// 占8个字节 
14   file.writeUTF("这是一个UTF字符串");// 这个长度写在当前文件指针的前两个字节处,可用readShort()读取 
15   file.writeBoolean(true);// 占1个字节 
16   file.writeShort(395);// 占2个字节 
17   file.writeLong(2325451l);// 占8个字节 
18   file.writeUTF("又是一个UTF字符串"); 
19   file.writeFloat(35.5f);// 占4个字节 
20   file.writeChar('a');// 占2个字节 
21    
22   file.seek(0);// 把文件指针位置设置到文件起始处 
23    
24   // 以下从file文件中读数据,要注意文件指针的位置 
25   System.out.println("——————从file文件指定位置读数据——————"); 
26   System.out.println(file.readInt()); 
27   System.out.println(file.readDouble()); 
28   System.out.println(file.readUTF()); 
29    
30   file.skipBytes(3);// 将文件指针跳过3个字节,本例中即跳过了一个boolean值和short值。 
31   System.out.println(file.readLong()); 
32    
33   file.skipBytes(file.readShort()); // 跳过文件中“又是一个UTF字符串”所占字节,注意readShort()方法会移动文件指针,所以不用加2。 
34   System.out.println(file.readFloat()); 
35      
36   //以下演示文件复制操作 
37   System.out.println("——————文件复制(从file到fileCopy)——————"); 
38   file.seek(0); 
39   RandomAccessFile fileCopy=newRandomAccessFile("fileCopy","rw"); 
40   intlen=(int)file.length();//取得文件长度(字节数) 
41   byte[] b=newbyte[len]; 
42   file.readFully(b); 
43   fileCopy.write(b); 
44   System.out.println("复制完成!"); 
45  
46 }


总结:

1、apk中有两种资源文件,使用两种不同的方式进行打开使用。
raw使用InputStream in = getResources().openRawResource(R.raw.test);
asset使用InputStream in = getResources().getAssets().open(fileName);

这些数据只能读取,不能写入。
2、SD卡中的文件使用FileInputStream和FileOutputStream进行文件的操作。
3、存放在数据区(/data/data/..)的文件只能使用openFileOutput和openFileInput进行操作。
注意不能使用FileInputStream和FileOutputStream进行文件的操作。
4、RandomAccess类仅限于文件的操作,不能访问其他IO设备。它可以跳转到文件的任意位置,从当前位置开始读写。



小马的错误:

  

日后小马如果再在开发过程中碰到有关File类的问题,会继续追加到此文章中,希望对处于跟小马一样阶段的朋友们有所帮忙,谢谢啦,O_O,每天进步一点,加油

本文出自 “酷_莫名简单” 博客,请务必保留此出处http://mzh3344258.blog.51cto.com/1823534/746174

天小马来写下自己的开发过程中碰到的问题和所犯的错,虽然简单,但还是希望通过总结提高自己,哪怕很小的进步,也希望朋友们跟小马多交流,指点小马的不足,多批评小马,有很多东西要学,我们多多交流,共同进步,直接看代码:

 

   
   
  1. package com.mzh.www; 
  2.  
  3. import java.io.File; 
  4. import java.io.IOException; 
  5.  
  6. import android.app.Activity; 
  7. import android.os.Bundle; 
  8. import android.os.Environment; 
  9.  
  10. /**   
  11. * @Title: FileTestActivity.java 
  12. * @Package com.mzh.www 
  13. * @Description: 文件类File的常用方法 
  14. * @author MZH 
  15. * @version V2.2 
  16. */ 
  17. public class FileTestActivity extends Activity { 
  18.     /** Called when the activity is first created. */ 
  19.     @Override 
  20.     public void onCreate(Bundle savedInstanceState) { 
  21.         super.onCreate(savedInstanceState); 
  22.         setContentView(R.layout.main); 
  23.          
  24.          
  25.         //小马写的时候不带后缀名,其实这个要写的 
  26.         //而且安卓中不建议用此种写法,支持使用Environment获取路径 
  27.         String path = "/sdcard/fileName";  
  28.         File file = new File(path); //不多讲 
  29.          
  30.          
  31.         //下面是File类的一些静态属性 
  32.         //file.separator;    小马以前喜欢用"/",虽然不错,但不支持,接着看下面 
  33.          
  34.          
  35.         //举两种 写法: 
  36.               //方法一: 
  37.               String path2 = Environment.getExternalStorageDirectory()
  38. .getPath() 
  39.                              +"/"+"XiaoMa.txt"; 
  40.               File fileName = new File(path2); 
  41.               //此处可以添加对文件的操作,IO流 
  42.                
  43.                
  44.               //方法二: 
  45.               String path3 = Environment.getExternalStorageDirectory()
  46. .getPath() 
  47.                              +File.separator+"XiaoMa.txt"; 
  48.               File fileNam = new File(path3); 
  49.               //此处可以添加对文件的操作,IO流 
  50.          
  51.                
  52.               /** 
  53.                * 大家是不是发现这两种写法第二种多此一举?其实并非如此的
  54. *,在Android中,官方鼓励支持使用 
  55.                * File.separator来插入"/"符号 
  56.                * 因为:不同的机型配置系统等各种因素下,"/"符号的转义字符也会不同*
  57. *,所以为保险起见, 
  58.                * 建议朋友们使用File.separator来区别 
  59.                */ 
  60.            
  61.                
  62.               //下面讲下文件的创建是怎么一回事 
  63.               //Android 中创建文件的方式有很多种,小马现在讲下
  64. //我们经常用到的几种哦,吼吼 
  65.               File file3 = new File("path"); //path为要创建文件的路径
  66. //,相关路径可查看API 
  67.                
  68.                
  69.               //创建一个临时文件 
  70.               //小马讲下,如果让我们自己创建临时文件时,我们还得拼接文件名
  71. //,Android为我们提供了更快捷的方式 
  72.               //prefix代表:文件名前缀,suffix代表:生成临时文件的格式,
  73. //如:.txt .amr .jpg .png等等 
  74.               try { 
  75.                  //此处小马未指定路径,它会默认创建在SD卡根目录下 
  76.                 File tempFile = File.createTempFile("前缀", "格式"); //记得加入try语句块中 
  77.                  
  78.                 //如果想要指定路径,则可以这样写 
  79.                 File tempFile2  = File.createTempFile("前缀", "格式",new File("指定临时文件路径")); 
  80.               } catch (IOException e) { 
  81.                 e.printStackTrace(); 
  82.               }  
  83.                
  84.                
  85.               //创建文件的方式有三种:要看仔细咯 
  86.                    
  87.                   File file2 = new File(path3);  //因为路径是自己指定的,
  88. //在此小马就直接合上面定义过的路径了 
  89.                   if(!file2.exists()){ 
  90.                        
  91.                        //方式一: 
  92.                       try { 
  93.                         file2.createNewFile(); 
  94.                        } catch (IOException e) { 
  95.                         // TODO Auto-generated catch block 
  96.                         e.printStackTrace(); 
  97.                        } 
  98.                        
  99.                       //方式二: 
  100.                       //file2.mkdir(); 
  101.                        
  102.                       //方式三: 
  103.                       //file2.mkdirs(); 
  104.                        
  105.                       /** 
  106.                        * 以上创建文件方式好像也没多大不同之处,小马的的错误,
  107. *创建文件的时候随便调用这三个方法其中之一 
  108.                        * 但后来发现还是有明显区别的,现在贴一段官方API说明
  109. *,小马英语也不咋的,希望英语一般的朋友们 
  110.                        * 看到英语不要怕自己不会翻译什么的,多查单词,
  111. *不会的再求助工作翻译下,查可以提高自己的英语能力 
  112.                        */ 
  113.                        
  114.                        
  115.                        
  116.                       /** 
  117.                        * 小述:讲下“/”与“/”的不同,在创建文件时不能使用使用windows方式,
  118. *也就是"/",除非你转义有linux方式的话就直接用“/”,省了麻烦,
  119. *还不会出错转义错误等问题,对吧? 
  120.                        */ 
  121.                        
  122.                        
  123.                      /** 
  124.                       * createNewFile() 
  125.                         Creates a new, empty file on the file system according to the path information  
  126.                         stored in this file. 
  127.                         这个方法指在指定路径下创建一个empty(空的,小马就认识几个单词,
  128. *其余的都有道查)文件  
  129.                       */ 
  130.                        
  131.                     /** 
  132.                      * mkdir() 
  133.                        Creates the directory named by the trailing filename of
  134.  this file. 
  135.                              这个方法指:创建一个指定目录下的文件,但这个方法不能创建多个目录,
  136. 一般都使用加S的,这个尽量少用,一般私有文件 
  137.                              及私有目录的创建用这个方法 
  138.                      */ 
  139.                        
  140.                      
  141.                      /** 
  142.                       * mkdirs() 
  143.                         Creates the directory named by the trailing filename of this file,  
  144.                         including the complete directory path required to create this
  145.  directory. 
  146.                         这个方法指:创建一个指定目录下的文件,与上面不同的是,
  147. 此方法可以创建多个目录哦,常用的创建文件的方法 
  148.                       */ 
  149.                        
  150.                       /** 
  151.                        * 最后,讲下isDirectory() 与  isFile()的小区别 
  152.                        * 小马刚开始不懂什么是Directory,后来试了下,讲直接的,
  153. 就是:是否是文件夹,isFile是否是文件,简单吧??O_O 
  154.                        */ 
  155.                        
  156.                        
  157.                        
  158.                     
  159.                        
  160.                   } 
  161.                
  162.     } 

    最后,不要忘记加Android中文件操作的权限:

 

   
   
  1. <!--往sdcard中写入数据的权限 --> 
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
  3.  <!--在sdcard中创建/删除文件的权限 --> 
  4.  

   
   
  1. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> 

  1.     
        
    • 这些问题都是小马在开发过程中遇到过的问题,虽然很低级 ,
    • 但错误犯多了就不会犯了,最后 ,
    • 小马希望大家多查英文文档,不管自己 
    • 英语阅读能力好不好,讲真话,小马的英语,可以让你哭,
    • 但要学会善用工具学习,爱编程,就要补编程方面的缺陷,不要被这英语吓到 
    • 啦,今天就讲这些内容吧,File类中其它方法都很简单,
    • 大家可以试着用下词典查下意思,很容易知道它是干吗的方法的,相信小马 
    • 小马希望:能跟大伙交流学习,共同进步,完成菜鸟中的菜鸟,
    • 到高手中的高手的蜕变,高手,是从菜鸟努力导致的,不是生下来就有的, 
    • 希望我们共同进步

     





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值