1、写入内置空间 output write
2、写入SDCard卡 input read
该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
RandomAccessFile同时将FileInputStream和FileOutputStream整合到一起,而且支持将从文件任意字节处读或写数据,RandomAccessFile类提供一种机制,相当于在文件流中插入了一个指针,可以按需读取。
File只是对一个文件或目录的抽象,可以想象成是一个文件句柄、标识,这个类本身只提供对文件的打开,关闭,删除,属性访问等等;
文件存储简单的来说就是一般的JAVASE中的IO流,只是把他应用于Android手机中而已;
1 文件存储
核心就是Context的openFileInput()和openFileOutput()方法.之后就用Java流来进行读写就可一了
//将一段文本内容保存到文件中: //在onDestory() 里面调用save()方法.此方法写在了super.onDestory() 下面. //openFileOutput --> FileOutputStream --> OutputStreamReader --> BufferedReader public void save() { String data = "Data to save"; FileOutputStream out = null; BufferedWriter writer = null; try { out = mContext.openFileOutput("data", Context.MODE_PRIVATE);//需要FileNot错误. writer = new BufferedWriter(new OutputStreamWriter(out)); //构建一个outputStreamWriter.接着由构建了一个BufferedWriter() writer.write(data);//需要IO错误 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } //在下一次打开的时候,从文件中读取数据 // openFileinput --> FileInputStream --> InputStreamReader --> BufferedReader // 前两个 file 一直在 input 前面 public String load() { FileInputStream in = null; BufferedReader reader = null; StringBuilder sb = new StringBuilder(); try { in = mContext.openFileInput("data"); //需要fileNOt错误 reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { //需要IO错误 sb.append(line); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); }
//写入到内置存储空间 public void write(View view) { String inputString = inputText.getText().toString(); if (inputString == null || "".equals(inputString.trim())) { Toast.makeText(mContext, "请输入需要写入的内容,不能为空", Toast.LENGTH_SHORT).show(); return; } FileOutputStream fos = null; try { if (appendBtn.isChecked()) { fos = mContext.openFileOutput(fileName, Context.MODE_APPEND); } else { fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE); } fos.write(inputString.getBytes()); //向文件里写入内容 Toast.makeText(mContext, "内容写入完毕!", Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { Toast.makeText(mContext, "文件没有找到,请检查文件路径", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(mContext, "写入过程中出现错误 IO", Toast.LENGTH_SHORT).show(); } } //读取内置存储空间 public void readFromSDCard(View view) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { String path = Environment.getExternalStorageDirectory() + File.separator + fileName; File file = new File(path); StringBuilder sBuilder = new StringBuilder(""); byte[] buffer = new byte[256]; int hasRead = 0; try { RandomAccessFile raf = new RandomAccessFile(file, "rw"); while ((hasRead = raf.read(buffer)) != -1) { sBuilder.append(new String(buffer, 0, hasRead)); } outputText.setText(sBuilder); raf.close(); } catch (FileNotFoundException e) { Toast.makeText(mContext, "文件没有找到,请检查文件路径", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(mContext, "写入过程中出现错误 IO", Toast.LENGTH_SHORT).show(); } } }
默认保存在 /data/data/<packagename>/files/ 目录下的
第二个是文件的操作模型,主要有两种模式可选
- MODE_PRIVATE(覆盖,是默认的操作模式)
- MODE_APPEND (追加) 不存在创建
- MODE_WORLD_READABLE 允许其他应用程序对程序进行读写操作.不过太危险了 ,在 4.2 之后 被废弃
- MODE_WORLD_WRITEABLE
edit.setSelection(inputText.length());
TextUtils.isEmpty()方法, 这个方法很好用,可以同时判断两种状态(null 和 等于空字符串) 的时候,就会返回true
时间: 2024-11-05 11:46:20