Java学习:File类
- File类的概述
- 重点:记住这三个单词
- 绝对路径和相对路径
- File类的构造方法
- File类判断功能的方法
- File类创建删除功能的方法
- File类获取(文件夹)目录和文件夹相关功能
File类的概述
Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中。
其中:
- 所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类;
- 而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类。
首先需要明白的是:流是干什么的?
- 为了永久性的保存数据
- 根据数据流向的不同分为输入流和输出流;
- 根据处理数据类型的不同分为字符流和字节流;
然后需要明白的是输入模式和输出模式是谁流向谁:
- InputStream(字节输入流)和Reader(字符输入流)通俗的理解都是读(read)的。
- OutputStream(字节输出流)和Writer(字符输出流)通俗的理解都是写(writer)的。
重点:记住这三个单词
- file:文件
- directory:文件夹/目录
- path:路径
绝对路径和相对路径
路径:
- 绝对路径:是一个完整的路径
- 以盘符(c:,D:)开始的路径
- D:\Users\cai\a.txt
- 相对路径:是一个简化的路径
- 相对指的是相对于当前项目的根目录,路径可以简化书写
- D:\Users\cai\a.txt-->简化为:a.txt
注意:
- 路径是不区分大小写的
- 路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两反斜杠代表一个普通的反斜杠
File类的构造方法
File类
位于java.io包
构造方法:
File(String parent, String child)//根据一个目录和一个子文件/目录得到File对象 new file("d:\","a.txt"); File(String pathname) //根据一个路径得到File对象 new file("d:\a.txt"); File(File parent, String child)//根据一个父File对象和一个子文件/目录得到File对象 File f = new File("d:\"); File f1=new File(f,"a.txt");
File类判断功能的方法
File类(File类的判断功能)
A:判断功能 public boolean isDirectory():判断是否是目录 public boolean isFile():判断是否是文件 public boolean exists():判断是否存在 public boolean canRead():判断是否可读 public boolean canWrite():判断是否可写 public boolean isHidden():判断是否隐藏
File类创建删除功能的方法
A:创建功能 public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了 public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了 public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
- 使用createNewFile()文件创建的时候不加.txt或者其他后缀也是文件,不是文件夹;使用mkdir()创建文件夹的时候,如果起的名字是比如aaa.txt也是文件夹不是文件;
注意事项:
- 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
File类(File类的重命名和删除功能)
A:重命名和删除功能 public boolean renameTo(File dest):把文件重命名为指定的文件路径 public boolean delete():删除文件或者文件夹 B:重命名注意事项 如果路径名相同,就是改名。 如果路径名不同,就是改名并剪切。 C:删除注意事项: Java中的删除不走回收站。 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
File类获取(文件夹)目录和文件夹相关功能
获取功能:
getName() 获取文件或文件夹的名称,不包含上级路径。
getAbsolutePath()获取文件的绝对路径,与文件是否存在没关系
length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified()获取最后一次被修改的时间。
文件夹相关功能
static File[] listRoots()列出所有的根目录(Window中就是所有系统的盘符) list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。 listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。 list(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。 listFiles(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
测试代码
public class CaiNiao{ public static void main(String[] args) throws IOException { //createFileMethod(); listRoots(); } //创建文件 public static void createFileMethod(){ File file = new File("file.txt"); try { boolean b = file.createNewFile(); System.out.print(b); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //创建临时文件 public static void createTempFileMethod(){ File dir = new File("D:\"); try { File b = File.createTempFile("test", ".tmp",dir);//使用指定目录的方法 System.out.print(b.getAbsolutePath()); File b1 = File.createTempFile("tmp2", null);//使用不指定目录的构造方法 System.out.print(b1.getAbsolutePath()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //创建目录 public static void createDirMethod(){ File dir = new File("d:"+File.separator+"dfr"+File.separator+"ddd"); File dir1 = new File("d:"+File.separator+"dff"+File.separator+"ddd"); boolean b = dir.mkdirs();//可以递归的创建不存在的目录 boolean b1 = dir1.mkdir();//创建目录,不能递归,只能创建一级目录 System.out.println(b); System.out.println(b1); } //删除文件 public static void deleteFileMethod(){ File file = new File("file.txt"); try { boolean b = file.createNewFile(); System.out.print(b); file.deleteOnExit(); file.delete(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //判断文件对象或者目录是否是文件或者目录时候,必须判断该文件是否存在 public static void IsDirOrFileMethod() throws IOException{ File file = new File("a.txt"); File file1 = new File("d:"+File.separator+"hhh"); file.createNewFile(); file1.mkdir(); System.out.println("是否存在"+file.exists()); System.out.println("是否是文件"+file.isFile()); System.out.println("是否是目录"+file.isDirectory()); System.out.println("是否是隐藏"+file.isHidden()); System.out.println("目录是否为绝对目录名"+file1.isAbsolute()); System.out.println("file对象对应的文件目录是否可write: "+file1.canWrite()); System.out.println("file对象对应的文件目录是否可read: "+file1.canRead()); System.out.println("file对象对应的文件目录是否可Execute: "+file1.canExecute()); } //获取的方法 public static void getMehtod(){ File file = new File("E:\file2.txt"); File dir = new File("abc"); System.out.println("获取抽象路径名转化为路径名字字符串:"+file.getPath());//E:file2.txt System.out.println("获取此File对象对应的绝对路径名:"+file.getAbsolutePath());//E:file2.txt System.out.println("获取此File对象的所对应目录(最后一级子目录(绝对路径))的父目录名:"+file.getParent());//E: System.out.println("获取此File对象最后修改时间:"+file.lastModified());//1405853667765,修改日期的毫秒数 } //相当于重命名剪切 public static void renameFile() throws IOException{ File f1 = new File("D:\file.txt"); File f2 = new File("E:\file2.txt"); System.out.println("f1重命名为f2的名字"+f1.renameTo(f2)); //System.out.println("f2重命名为f1的名字"+f2.renameTo(f1)); } //列出根目录的全部内容 public static void listRoots(){ File[] files = File.listRoots(); for(File file:files){ System.out.println("列出根目录:"+file); } } //列出指定的目录的全部内容,包括隐藏文件,文件夹的名字和文件的名字 public static void listDemo(){ File f = new File("d:\"); System.out.println("获取D盘的可用空间"+f.getFreeSpace()); System.out.println("获取D盘的可用于虚拟机的空间"+f.getUsableSpace()); System.out.println("获取D盘的总容量"+f.getTotalSpace()); String[] files = f.list(); for(String file:files){ System.out.println("列出根目录:"+file); } } //列出指定的目录的全部内容,包括隐藏文件,文件夹的名字和文件的名字 public static void listFileterDemo(){ File f = new File("d:\"); String[] files = f.list(); for(String file:files){ System.out.println("列出根目录:"+file); } } //列出指定的目录的全部内容,包括隐藏文件,文件夹的名字和文件的名字,使用 File[] listFiles() //返回值为一个File对象 public static void listFileDemo(){ File f = new File("d:\"); File[] files = f.listFiles(); for(File file:files){ System.out.println("列出根目录:"+file.getName()); } } /** * 列出指定目录下,后缀为.java的文件,使用方法String[] list(FilenameFilter filter) */ public static void ListFileFileter(){ File f = new File("E:"+File.separator+"workspace"+File.separator+"IOTest"); String[] files = f.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub //System.out.println("dir:"+dir+"name....."+name);//说明dir表示指定目录,name表示指定目录的名称 return name.endsWith(".java");//通过匿名内部类的返回值来控制指定目录下面的文件和文件夹的显示 } }); System.out.println(files.length); //遍历指定目录下面的文件和目录 for(String file:files){ System.out.println(file); } } }