首页 > 系统 > Android > 正文

Java IO-1 File 和 Android 外部存储简单案例

2019-11-10 19:09:10
字体:
来源:转载
供稿:网友

java IO File 使用方法

File 类

1、Public Constructors 构造方法

构造方法基本有4个

File(String pathname)File(String parent, String child)File(File parent, String child)File(URI uri)

从构造函数看出File并不是单指文件的路径,还有可能指向的是一个文件集合也就是文件夹。

第一个构造函数的参数pathname可以是文件路径也可以是文件夹的路径

第二个构造函数的第一个形参parent为文件所在目录路径,第二个自然是文件路径

第三个构造函数与第二构造函数的意义相同,只不过把第一个形参类型更改为File,但是代表的还是文件所在文件夹的路径。

第四个 我基本不太用  只知道URL是一种格式,等有时间深入了解了,我再来补充一下。

(之后代码会给出简单例子)

2、File类的方法

方法太多,我还是用代码来掩饰一些我比较常用的方法(不定期更新)

(代码是基于android平台开发,本人真菜,如有不规范或者bug请拍砖)

先展示一下activity的截图

接下来请看代码,里面我写了详细的注释

同时要注意路径的转义字符

package com.ty.io_file_demo1;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.File;public class MainActivity extends AppCompatActivity {    File file;    Button btn_Query;    TextView tv_Exits;    TextView tv_Path;    TextView tv_NormalFile;    TextView tv_Length;    EditText et_Input;    @Override    PRotected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//绑定控件        btn_Query = (Button) findViewById(R.id.BTN_Query);        tv_Exits = (TextView) findViewById(R.id.TV_Exits);        tv_Path = (TextView) findViewById(R.id.TV_Path);        tv_NormalFile = (TextView) findViewById(R.id.TV_NormalFile);        tv_Length = (TextView) findViewById(R.id.TV_Length);        et_Input = (EditText) findViewById(R.id.ET_Input);//接下来就是第一轮测试        //File的构造过程就是绑定一个文件,我一会儿会输入一个文件名为Text.txt的文件        // 这个文件暂时是没有的。        //我尝试点击一下查询的按钮  看看会显示出什么结果    }    public void onClick(View v)    {        file = new File(".//", et_Input.getText().toString());        tv_Exits.setText(String.valueOf(file.exists()));    }}接下来是结果

可以看到结果是FALSE

接下来是第二轮测试  同时嵌入,路径为SD卡(外部存储),顺便把外部存储也记录一下。文字较少我都打在注释里了。

package com.ty.io_file_demo1;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.File;import java.io.IOException;import java.io.StringReader;import java.util.Date;public class MainActivity extends AppCompatActivity {    File file;    Button btn_Query;    TextView tv_Exits;    TextView tv_Path;    TextView tv_NormalFile;    TextView tv_Length;    EditText et_Input;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//绑定控件        btn_Query = (Button) findViewById(R.id.BTN_Query);        tv_Exits = (TextView) findViewById(R.id.TV_Exits);        tv_Path = (TextView) findViewById(R.id.TV_Path);        tv_NormalFile = (TextView) findViewById(R.id.TV_NormalFile);        tv_Length = (TextView) findViewById(R.id.TV_Length);        et_Input = (EditText) findViewById(R.id.ET_Input);//接下来就是第二轮测试        //File的构造过程就是绑定一个文件,我一会儿会输入一个文件名为aaaa的文件    }    public void onClick(View v)    {        //由于我用真实手机作为测试,所有有一些权限问题,我会把路径设置到sd卡中,顺便把新学的sd卡存储也写一下        //我认为初始化和检查应该封装一下,但是如果我封装完看起来就需要跳来跳去,不方便打注释        //并且如果程序需要去读写外部存储,我建议在读写页面开始时就检测一下,是否可用。        //我之后会写一个封装好Demo,重新上传一个博客        //一、检查外部存储(一般都是sd卡吧  我也见过有直接能插手机的U盘 但是不多见)状态,返回一个String类型的状态(英文解释的很清楚,我就不翻译啦)            //1、MEDIA_MOUNTED               Storage state if the media is present and mounted at its mount point with read/write access.            //2、MEDIA_MOUNTED_READ_ONLY     Storage state if the media is present and mounted at its mount point with read-only access.            //3、MEDIA_UNMOUNTED             Storage state if the media is present but not mounted.            //状态还有很多,可以自己查看API        String sd_Stats = Environment.getExternalStorageState();        if(sd_Stats.equals(Environment.MEDIA_MOUNTED))//只有当可读可写的时候  我才继续进行        {            File sdPath = Environment.getExternalStorageDirectory();//拿到SD卡路径            file = new File(sdPath, et_Input.getText().toString());//这里就要注意,用到的构造函数是 File(File parent, String child)            boolean isExists = file.exists();//方便调试,也可以直接作为判断条件            if(!isExists)//如果文件不存在,创建文件,并且不能用file为null作为判断,不管该文件或者目录是否存在,file都会有值(构造函数的路径参数)            {                try {                    //True: if the named file does not exist and was successfully created;                    //False: if the named file already exists                    if(file.createNewFile())//创建文件会有一个返回值,如果文件已经存在就返回false,如果不存在并成功创建就返回true                    {                        //获取所需要显示的值,函数还有很多。我就简单列部分                        String exits = String.valueOf(file.exists());//只要程序循行到这里,就代表创建程序成功,结果一定回事true                        String filePath = file.getPath();                        String fileName=file.getName();                        String isReadable=String.valueOf(file.canRead());                        String isWritable= String.valueOf(file.canWrite());                        String simpleFile=String.valueOf(file.isFile());                        String isHidden=String.valueOf(file.isHidden());                        Date lastChange=new Date(file.lastModified());                        String length=String.valueOf(file.length());                        String parentPath=file.getParent();                        //设置显示                        tv_Exits.setText(exits);                        tv_Path.setText("文件路径:"+filePath+" "+"文件名:"+fileName+" "+"可读:"+isReadable+" "+"可写:"+isWritable);                        tv_NormalFile.setText("一般文件:"+simpleFile+" "+"隐藏文件:"+isHidden+" "+"最后修改时间"+lastChange);                        tv_Length.setText("文件长度:"+length+" "+"父目录:"+parentPath);                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}结果显示

最后不能忘记很重要的事情!!!那就是权限的添加

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

大家会发现,我的外部存储并不是sdcard目录,那是因为我测试的手机根本就没有sd卡插槽,通过软件查看到,/mnt/sdcard这个目录是有的,但是是一个逻辑目录,具体我没有深究,欢迎大神拍砖。

这篇主要讲了一下,File类的简单使用和外部存储简单创建文件,考虑到篇幅和测试的问题,我会把File的创建查询文件夹的一些方法,另起一篇,用ES来测试(windows平台)。

e.g.  我发现一个怪事,我在真机测试时,其实并不需要开启权限(我之前还做过摄像头测试,也不需要),如果有人知道的话,欢迎指教。

好了   今天是我写的第一篇比较详细的博客,也是一个好习惯的开始。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表