Android文件存储之SDcard
2016-09-07 18:29
323 查看
2.SDcard存储:(唯一的外部存储)
(1)Sdcard属于外部存储,因此程序保存的数据可以被其他项目访问,保存数据的程序删除后,数据不会被删除;
(2)SDcard存储项目必须配置权限:SDcard创建和删除文件权限,写入权限;
(3)保存文件步骤:
1.得到sdcard的目录 “/mnt/sdcard”
String sdcard =Environment.getExternalStorageDirectory().toString();
2.创建保存数据的文件,文件的名字可以是任意的,比如可以没有后缀名
File file = new File(sdcard+”/school”); file.createNewFile();//创建文件
3.得到文件输出流
4.使用流输出数据,保存到文件中
5.关闭流
取出sdcard目录
保存数据
取出数据
IOUtils工具类
(1)Sdcard属于外部存储,因此程序保存的数据可以被其他项目访问,保存数据的程序删除后,数据不会被删除;
(2)SDcard存储项目必须配置权限:SDcard创建和删除文件权限,写入权限;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(3)保存文件步骤:
1.得到sdcard的目录 “/mnt/sdcard”
String sdcard =Environment.getExternalStorageDirectory().toString();
2.创建保存数据的文件,文件的名字可以是任意的,比如可以没有后缀名
File file = new File(sdcard+”/school”); file.createNewFile();//创建文件
3.得到文件输出流
4.使用流输出数据,保存到文件中
5.关闭流
取出sdcard目录
public class MainActivity extends Activity { private String sdcard = null;// sdcard的目录 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.sdcard = Environment.getExternalStorageDirectory().toString();//取出sdcard的目录 }
保存数据
public void save(View v) { try { //(2)创建保存数据的文件, File file = new File(sdcard + "/school"); if(!file.exists()) {//如果文件不存在,则创建文件 file.createNewFile();//创建文件 } //(3)得到文件输出流 // OutputStream out = new FileOutputStream(file);//替换 // OutputStream out = new FileOutputStream(file, false);//替换 OutputStream out = new FileOutputStream(file, true);//追加 //(4)使用流输出数据,保存到文件中 String data = "你好"; out.write(data.getBytes());//保存 // (5)关闭流 out.close(); } catch (Exception e) { e.printStackTrace(); } }
取出数据
// 步骤2:取出数据 // (1)得到sdcard的目录 // (2)创建文件输入流 // (3)通过输入流取数据 // (4)关闭流 public void fetch(View v) { try { //(2)创建文件输入流 File file = new File(sdcard + "/school"); InputStream in = new FileInputStream(file); //(3)通过输入流取数据 byte[] data = IOUtils.read1(in, in.available(), 4096); // byte[] data = IOUtils.read2(new BufferedInputStream(in), in.available(), 4096); //IOUtils是文件操作的一个工具类 String str = new String(data); Toast.makeText(this, str, Toast.LENGTH_LONG).show(); // (4)关闭流 in.close(); } catch (Exception e) { e.printStackTrace(); } }
IOUtils工具类
package xena.util; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; public class IOUtils { /** * @param in * @param size--->表示一定要取多少个字节 * @param max---建意写成4096 * @return 如果没有取到size个字节的数据,该方法不会返回,要么继续取,要么阻塞 */ public static byte[] read1(InputStream in, int size, int max) { // byte[] b = new byte[20]; // in.read(b, 0, 20); // //从in中最多读取7个字节,存在b中,从b[3]开始存储, byte[] buffer = new byte[size]; int hasRead = 0; while (true) { if (max > size - hasRead) { max = size - hasRead; } try { hasRead = hasRead + in.read(buffer, hasRead, max); } catch (IOException e) { e.printStackTrace(); } if (hasRead == size) { break; } } return buffer; } /** * * @param bin * @param size--->表示一定要取多少个字节 * @param max * @return 没有取到size个字节的数据,该方法不会返回,要么继续取,要么阻塞 */ public static byte[] read2(BufferedInputStream bin, int size, int max) { byte[] image = new byte[size]; int hasRead = 0; while (true) { if (max > size - hasRead) { max = size - hasRead; } try { hasRead = hasRead + bin.read(image, hasRead, max); } catch (IOException e) { e.printStackTrace(); } if (hasRead == size) { break; } } return image; } }
相关文章推荐
- android sdcard存储方案(基于fuse文件系统):之二
- android sdcard存储方案一(基于fuse文件系统)
- [Android]文件存储-内存(系统存储)/内部存储(内置存储卡)/外部存储(SDcard)
- 基于fuse文件系统的android sdcard存储方案:之二
- android sdcard文件存储 + 媒体库更新方法
- android sdcard存储方案三(基于fuse文件系统):
- android 开发-文件存储之读写sdcard
- android sdcard存储方案三(基于fuse文件系统):
- android sdcard存储方案二(基于fuse文件系统)
- android sdcard存储方案一(基于fuse文件系统)
- android sdcard存储方案二(基于fuse文件系统)
- android文件存储:直接存储文件和文件存储到SDCard
- android sdcard存储方案(基于fuse文件系统):之一
- Android sdcard追加存储文件问题
- Android文件存储_A_文本文件_自定义 向SDCard上保存文件
- (转)android操作sdcard中的多媒体文件(二)——音乐列表的更新
- Android开发——对sdcard扩展卡文件操作
- android 删除sdcard中文件命令
- Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库
- Android 中下载文件到sdcard和进度条小结