又是失业学习的一天~噗呲最近面试对io流有点不记得,于是翻开了久违JAVA四大名著之java从入门到放弃重新复习,顺便弄一个IO系列以后自己直接看笔记算了~
File类
File类是java.io包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过File类来完成。值得指出的是,不管是文件还是目录都是使用File来操作的,File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
File类共提供了三个不同的构造函数:
1.File (String pathname) 例:File f1 = new File("test1.txt"); //创建文件对象f1,f1所指的文件是在当前目录下创建的test1.txt 2.File (String parent,String child) 例:File f2 = new File("D:\\testDir2","test2.txt") ;//注意:D:\\testDir2目录事先必须存在,否则异常 3.File(File parent, String child) 例: String fileName = "D:"+File.separator+"testDir3"+File.separator; File f3 = new File(fileName); if(!f3.exists()&&f3.isDirectory()){ f3.mkdir(); } File f4 = new File(f3, "test3.txt"); if(!f4.exists()&&!f4.isFile()){// 如果文件不存在,创建文件 try { f4.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block } } System.out.println(f4.toString());//D:\testDir3\test3.txt
文件分隔符
注意:我们知道,各个平台之间的路径分隔符是不一样的。所以为了屏蔽各个平台之间的分隔符差异就使用JDK 为我们提供的字段。
ps:Windows在路径名中使用反斜杠(\)作为名称分隔符,而UNIX使用正斜杠(/)。
--windows输出 System.out.println(File.separator);//输出 \ --是用来分隔同一个路径字符串中的目录的 System.out.println(File.pathSeparator);//输出 ; --是分隔连续多个路径字符串的分隔符
创建File对象成功后,可以使用以下列表中的方法操作文件。
(表格从菜鸟教程复制:https://www.runoob.com/java/java-file.html)
看到懵逼了?方法是不是有点多?其实我自己工作一年多来常用就这几个:
1.创建方法:
1.boolean createNewFile() 不存在返回true 存在返回false
2.boolean mkdir() 创建目录,如果上一级目录不存在,则会创建失败
3.boolean mkdirs() 创建多级目录,如果上一级目录不存在也会自动创建
2.删除方法:
1.boolean delete() 删除文件或目录,如果是删除目录,则目录下必须为空才能删除,不然报异常
2.boolean deleteOnExit() 文件使用完成后删除
3.判定方法:
1.boolean canExecute()判断文件是否可执行
2.boolean canRead()判断文件是否可读
3.boolean canWrite() 判断文件是否可写
4.boolean exists() 判断文件或目录是否存在
5.boolean isDirectory() 判断此路径是否为一个目录
6.boolean isFile() 判断是否为一个文件
7.boolean isHidden() 判断是否为隐藏文件
8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断
4.获取方法:
1.String getName() 获取此路径表示的文件或目录名称
2.String getPath() 将此路径名转换为路径名字符串
3.String getAbsolutePath() 返回此抽象路径名的绝对形式
4.String getParent()//如果没有父目录返回null
5.long lastModified()//获取最后一次修改的时间-->毫秒值,如果需要看年月日时分秒的话,需要创建日历类?然后通过日历类的set方法把值传进去,就可以获取具体yyyymmdd之类的啦
6.long length() 返回由此抽象路径名表示的文件的长度。
7.boolean renameTo(File f) 重命名由此抽象路径名表示的文件。
8.File[] liseRoots()//获取机器盘符
9.String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
10.String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录
最最最后就是一个小例子吧~喷下以后回来看的垃圾郭良俊,好好看哈~
package com.htjf.util; import java.io.File; import java.util.ArrayList; import java.util.List; /** * File文件工具类 * @author Jiomer * */ public class FileUtil { /** * 获取本地文件夹下所有的文件 * isAddDirectory 是否加载子目录下的文件 * @param filepath 文件夹路径 * @return */ public static List<String> getListNames(String filepath,boolean isAddDirectory){ List<String> listName = new ArrayList<String>(); File baseFile= new File(filepath); if (baseFile.isFile() || !baseFile.exists()) { return listName; } File[] files = baseFile.listFiles(); for (File file : files) { if (file.isDirectory()) { if(isAddDirectory){ listName.add(file.getName()); } listName.addAll(getListNames(file.getAbsolutePath(),isAddDirectory)); } else { listName.add(file.getName()); } } return listName; } /** * 文件处理前重命名(以扩展名替换的形式) * @param srcFile 需要重命名的文件 * @param tar 重命名目标字符串 * @param rep 替换字符串 * @return 重命名后文件 */ public static File rename(File srcFile, String tar, String rep) { String perMatchFileName = srcFile.getPath().replace(tar, rep); File newNameFile = new File(perMatchFileName); srcFile.renameTo(newNameFile); return newNameFile; } public static String reFileName(String oldName, String tar, String rep) { String newNameFile = oldName.replace(tar, rep); return newNameFile; } /** * 删除文件 * @param file * @return */ public static boolean delFile(File file){ // File file=new File(filePath+File.separator+fileName); if(file.exists()&&file.isFile()){ return file.delete(); }else{ return false; } } }