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. 我发现一个怪事,我在真机测试时,其实并不需要开启权限(我之前还做过摄像头测试,也不需要),如果有人知道的话,欢迎指教。
好了 今天是我写的第一篇比较详细的博客,也是一个好习惯的开始。
新闻热点
疑难解答