【io】流及File对象的处理(二)
IO的处理
本文主要介绍File对象及其处理方法
1. 概念和方法
# 概念:代表物理盘符中的一个文件或者文件夹 # 方法: (1)createNewFile() # 创建一个新文件 (2)mkdir() # 创建一个新目录 (3)delete() # 删除文件或空目录 (4)exists() # 判断File对象所代表的对象是否存在 (5)getAbsolutePath() # 获取文件的绝对路径 (6)getName() # 取得文件的名字 (7)getParent() # 获取文件/目录所在的父目录 (8)isDirectory() # 是否是目录 (9)isFile() # 是否是文件 (10)length() # 获得文件的长度 (11)listFiles() # 列出目录中的所有内容 (12)renameTo() # 修改文件名为
2. 文件操作
2.1分隔符
# 路径分隔符+名称分隔符
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//分隔符 public static void main(String[] args) throws Exception{ separator(); } public static void separator(){ //路径分隔符,结果为一个分号 ; (还记得配置环境变量中的path里都是用分号隔开的嘛) System.out.println(File.pathSeparator); //名称分隔符 结果为一个斜线 \ (windows下电脑文件的目录) System.out.println(File.separator); }
2.2 文件操作
# 创建文件+删除文件+获取文件信息+判断
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//文件操作 public static void main(String[] args) throws Exception{ //1. 创建文件 File file = new File("d:\\file.txt"); //判断文件是否存在 if(!file.exists()){ //判断文件是否创建成功 如果文件没有返回true: 成功 如果文件已经存在返回false boolean b = file.createNewFile(); } //2. 删除文件 删除成功true boolean result = file.delete(); // 使用jvm退出时删除文件 //file.deleteOnExit(); //加5s延时是为了看到效果 //Thread.sleep(5000); //3. 获取文件信息 绝对路径 getPath为相对路径,即上面写什么就是什么 String url = file.getAbsolutePath();//结果为d:\file.txt //获取名称 String name = file.getName();//结果为:file.txt //获取父目录 String parentsource = file.getParent();//结果为:d:\ //获取文件的长度 字节数 long length = file.length(); //获取文件的创建时间 String data = new Date(file.lastModified()).toLocaleString();//结果为年月日时分秒的结构 //4.判断 //判断是否可写 boolean iswrite = file.canWrite(); //判断是否是文件 boolean isFile = file.isFile(); //判断是否是隐藏的 boolean ishide = file.isHidden(); }
2.3 文件夹操作
# 创建+删除+获取信息+判断+遍历
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//文件夹操作 public static void main(String[] args) throws Exception{ //1. 创建文件夹 File dir = new File("d:\\aa\\bb\\cc"); //判断文件夹是否存在 if(!dir.exists()){ //创建文件夹 mkdir:创建单级目录 mkdirs:创建多级目录 boolean b = dir.mkdirs(); } //2. 删除文件夹 这个删除是只删除最底层的,比如上面的cc目录,并且要求里面是空的 boolean result = dir.delete(); // 使用jvm退出时删除文件夹 //dir.deleteOnExit(); //加5s延时是为了看到效果 //Thread.sleep(5000); //3. 获取文件夹信息 绝对路径 getPath为相对路径,即上面写什么就是什么 String url = dir.getAbsolutePath();//结果为d:\aa\bb\cc // 获取名称 String name = dir.getName();//结果为:cc //获取父目录 String parentsource = dir.getParent();//结果为:d:\aa\bb //获取文件的创建时间 String data = new Date(dir.lastModified()).toLocaleString();//结果为年月日时分秒的结构 //4.判断 //判断是否是文件夹 boolean isdirectory = dir.isDirectory(); //判断是否是隐藏的 boolean isFile = dir.isHidden(); //5. 遍历文件夹 File dir2 = new File("d:\\图片"); String[] files = dir2.list();//返回的是字符串数组 //File[] files2 = dir2.listFiles();//返回的是file数组 for(String str:files){ System.out.println(str); } }
3. FileFilter接口
# public interface FileFilter # boolean accept(File pathname) # 当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中.
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) throws Exception{ File dir = new File("d:\\图片"); File[] files = dir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { //只筛选.jpg结尾的文件 if(pathname.getName().endsWith(".jpg")){ return true; } return false; } }); for(File file:files){ System.out.println(file.getName()); } }
4. 递归删除和递归遍历
# 递归遍历文件夹+递归删除文件夹
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) throws Exception{ //递归遍历文件夹 listDir(new File("d:\\myfiles")); //递归删除文件夹 deleteDir(new File("d:\\myfiles")); } //递归遍历文件夹 public static void listDir(File dir){ File[] files = dir.listFiles(); if(files!=null&&files.length>0){ for(File file:files){ if(file.isDirectory()){ listDir(file);//这用到了递归 }else { System.out.println(file.getAbsoluteFile()); } } } } //递归删除文件夹 public static void deleteDir(File dir){ File[] files = dir.listFiles(); if(files!=null&&files.length>0){ for(File file:files){ if(file.isDirectory()){ deleteDir(file);//递归 }else{ file.delete(); } } } dir.delete(); }
5. Properties
# Properties:属性集合 # 特点: (1)存储属性名和属性值 (2)属性名和属性值都是字符串类型 (3)没有泛型 (4)和流有关
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) throws Exception{ //1. 创建一个集合 Properties properties = new Properties(); //2. 添加数据 properties.setProperty("username","zhangsan"); properties.setProperty("age","20"); System.out.println(properties.toString());//结果为:{age=20, username=zhangsan} //3. 遍历 //3.1 keySet //3.2 entrySet //3.3 stringPropertiesNames() Set<String> pronames = properties.stringPropertyNames(); for(String pro:pronames){ System.out.println(pro+"---"+properties.getProperty(pro));//结果:age---20 username---zhangsan } //4. 和流有关的方法 //-----------list------------ PrintWriter pw = new PrintWriter("d:\\print.txt"); properties.list(pw); //之后print.txt文件中就有两条数据了 age=20 username=zhangsan pw.close(); //-----------store保存----------- FileOutputStream fos = new FileOutputStream("d:\\print.properties"); properties.store(fos,"注释"); fos.close(); //-----------load加载------------ Properties properties2 = new Properties(); FileInputStream fis = new FileInputStream("d:\\store.properties"); properties2.load(fis); fis.close(); }
持续更新!!!