Android数据存储
IO :http://www.cnblogs.com/hxsyl/p/3302852.html
getParentFile()的返回值是File型的。而getParent() 的返回值是String型的。mkdirs是File类里面的方法,mounted:爬,增加,安装String fileName="new .txt";
String dir="mydir1/mydir2";
File f=new File(dir,fileName);
当我直接f.mkdirs();后new .txt也变成了目录
而f.getParentFile().mkdirs();只有mydir1/mydir2的目录这个是为什么首先,你不要被File给迷惑了,中文翻译是个文件的意思,但Java中它表示的是“文件和目录路径名的抽象表示形式”,也就是说File即可以是文件,也可以是目录路径名;其次,File f=new File(dir,fileName); 这根据dir路径名字符串和fileName路径名字符串创建一个新 File实例,也就是说你认为fileName表示的是个文件, 而Java认为fileName可以是个文件和目录路径;
所以这样调用f.mkdirs(),就会创建f表示的路径名指定的目录(包括dir和fileName),因为你明确的要创建目录;你在f.getParentFile().mkdirs()后,再f.createNewFile(),这样Java才知道你要创建一个fileName的文件;f.mkdirs();是以f为基准建立也就是说 f目录前面的都应该是目录,包括他,以此类推:f.getParent().mkdirs()是以 f.getParent()为基准建立,包括f.getParent()(这里可以把f.getParent()看做是第一种情况中的 f )。就这样f是个File对象,f.getParentFile()也是个File对象,同样调用mkdirs(),它们的行为不一样吗?这与你这样创建File f=new File(dir,fileName),调用f.mkdirs();
和File parentPath=new File(dir);调用parentPath.mkdirs();
与你上面的是一样吗?只说到这,自己再继续学习。private static final String FILENAME = "mldn.txt" ; // 设置文件名称@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
FileOutputStream output = null ; // 接收文件输出对象try {
output = super.openFileOutput(FILENAME, Activity.MODE_PRIVATE) ;
} catch (FileNotFoundException e) {
e.printStackTrace();}PrintStream out = new PrintStream(output) ; // 输出方便out.println("姓名:李兴华;") ;
out.println("年龄:30;") ;
out.println("地址:北京魔乐科技软件学院。") ;
out.close() ; // 资源一定要关闭
private static final String FILENAME = "mldn.txt" ; // 设置文件名称private TextView msg = null ; // 文本组件@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView) super.findViewById(R.id.msg) ;FileInputStream input = null ;
try {
input = super.openFileInput(FILENAME) ; // 取得输入流} catch (FileNotFoundException e) {
e.printStackTrace();}Scanner scan = new Scanner(input) ;
while(scan.hasNext()) {
this.msg.append(scan.next() + "\n") ;}scan.close() ;}<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
private static final String FILENAME = "/mnt/sdcard/mldndata/mymldn.txt" ; // 设置文件名称@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
File file = new File(FILENAME) ; // 定义要操作的文件if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs() ; // 创建父文件夹路径
}PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(file));out.println("北京魔乐科技软件学院(MLDN,www.MLDNJAVA.cn),讲师:李兴华");
} catch (Exception e) {
e.printStackTrace() ;} finally { // 一定要关闭流if(out != null) {out.close() ;}}}private static final String FILENAME = "mymldn.txt" ; // 设置文件名称private static final String DIR = "mldndata" ; // 操作文件夹的名称@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + DIR + File.separator + FILENAME); // 定义要操作的文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); // 创建父文件夹路径
}PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(file));out.println("北京魔乐科技软件学院(MLDN,www.MLDNJAVA.cn),讲师:李兴华");
} catch (Exception e) {
e.printStackTrace();} finally { // 一定要关闭流if (out != null) {out.close();}}} else {
Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show() ;}}private static final String FILENAME = "mymldn.txt" ; // 设置文件名称private static final String DIR = "mldndata" ; // 操作文件夹的名称private TextView msg = null ;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView) super.findViewById(R.id.msg) ;if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + DIR + File.separator + FILENAME); // 定义要操作的文件
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); // 创建父文件夹路径
}Scanner scan = null ;
try {
scan = new Scanner(new FileInputStream(file)) ;while(scan.hasNext()) {
this.msg.append(scan.next() + "\n") ;}} catch (Exception e) {
e.printStackTrace();} finally { // 一定要关闭流if (scan != null) {scan.close();}}} else {
Toast.makeText(this, "保存失败,SD卡不存在!", Toast.LENGTH_LONG).show() ;}}private TextView msg = null ;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.msg = (TextView) super.findViewById(R.id.msg) ;Resources res = super.getResources() ; // 资源操作类InputStream input = res.openRawResource(R.raw.mybook) ; // 为要读取的内容设置输入流
Scanner scan = new Scanner(input) ;
StringBuffer buf = new StringBuffer() ;
while (scan.hasNext()) {
buf.append(scan.next()).append("\n") ;
}scan.close() ;try {
input.close() ;} catch (IOException e) {
e.printStackTrace();}this.msg.setText(buf) ;
}1.在AndroidManifest.xml中加入访问SDCard的权限如下:<!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放 文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录,2.2的时候为:/mnt/sdcart 2.1的时候为:/sdcard,所以使用静态方法得到路径会好一点。
File saveFile = new File(sdCardDir, "abc.txt");FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("你好".getBytes());
outStream.close();}
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.