第17章 文件类

作者: yangsg | 来源:发表于2019-04-16 11:15 被阅读144次

Java提供了对操作系统中文件进行操作的文件类,其类名是java.io.File类,其中包含了对文件和目录(文件夹)操作的一系列API方法。
需要注意的是,

  • java.io.File类可以指向一个尚不存在的文件或目录
  • File类不操作文件中的内容,只操作文件或目录自身
1. 静态属性

主要用于表示系统中路径分隔符,在不同的系统中有不同的分隔符。比如“C:\Program Files\Java”路径中的“\”就是路径分隔符。

  • static String pathSeparator
    与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
  • static char pathSeparatorChar
    与系统有关的路径分隔符。
  • static String separator
    与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
  • static char separatorChar
    与系统有关的默认名称分隔符。
2.构造方法
  • File(String path)
    创建一个path路径表示的文件或者目录对象
  • File(String parent, String child)
    创建一个在parent路径下名字为child的文件或者目录对象
  • File(File parent, String child)
    创建一个在parent对象表示的路径下名字是child的文件或者目录对象
  • File(Uri uri)
    通过给定的uri对象创建一个文件或者目录对象
3. API方法
  • canRead()和canWrite()返回值:boolean
    测试某个文件是否可读或可写
    比如某个文件是“只读”的,其测试结果如下
File f = new File("c:/1.txt"); //只读文件
boolean b1 = f.canRead(); // true
boolean b2 = f.canWrite(); // false

  • createNewFile()返回值:boolean
    创建新文件,这个方法只能创建文件,不能用于创建目录(文件夹)
File f = new File("c:/1.txt"); //文件不存在
f.createNewFile(); //创建文件

如果想通过该方法在c盘下创建一个abc目录,执行下面的代码是不成功的,只能建立一个没有扩展名的,名字是abc的文件

File f = new File("c:/abc"); 
f.createNewFile(); 
名字是abc没有扩展名的文件

如果想创建一个在c盘xyz目录下1.txt文档,执行下面的代码是不成功的,因为c盘中没有xyz目录。createNewFile()方法不会创建中间所需的目录

File f = new File("c:/xyz/1.txt"); 
f.createNewFile(); 
IO异常
  • mkdir()返回值boolean
    创建一级目录,这个方法只能用于创建一级目录,不能用于创建文件或多级目录
    示例:在c盘下创建目录abc,成功
File f = new File("c:/abc"); 
f.mkdir();

示例:在c盘下创建目录abc/xyz,成功。因为c盘刚刚在上一个示例中创建了abc目录,所以可以在abc中创建xyz目录

File f = new File("c:/abc/xyz"); 
f.mkdir();

示例:在c盘下创建目录x/y/z,失败。因为c盘在创建目录z时没有找到前置的父目录x/y,但程序不会出现异常。

File f = new File("c:/x/y/z"); 
f.mkdir();

  • mkdirs()返回值boolean
    mkdirs()可以理解为是mkdir()的加强版,它可以将路径中缺失的目录一并创建出来
    示例:在c盘下创建目录x/y/z,成功。因为c盘在创建目录z时可以将缺失的x/y目录一并创建出来
File f = new File("c:/x/y/z"); 
f.mkdirs();

  • exists()返回值:boolean
    判断对象所表示的文件或目录是否存在
File f = new File("c:/x/y/z"); 
boolean b = f.exists() //true

如果想在c:/1/2/3/中创建haha.txt,比较好的做法是

File path = new File("c:/1/2/3");
if(!path.exists()){// 先判断目录是否存在
  path.mkdirs();
}
File file = new File(path, "haha.txt"); //在path对象表示的路径(c:/1/2/3)中创建haha.txt文件
file.createNewFile();

  • delete()返回值:boolean
    删除对象所表示的文件或目录,文件或目录不存在也不会报错
File f = new File("c:/1.txt");
f.delete();

  • getName()返回值:String
    得到对象所表示的文件或目录最后一级的名字
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
String a = f1.getName(); // 1.txt
String b = f2.getName(); // c

  • getParent()返回值:String
    得到对象所表示的文件或目录所在的父级目录(字符串形式)
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
String a = f1.getParent(); // c:/
String b = f2.getParent(); // c:/a/b
  • getParentFile()返回值:File
    得到对象所表示的文件或目录所在的父级目录(File形式)
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
File a = f1.getParentFile(); /* c:/ */
File b = f2.getParentFile(); /* c:/a/b */

  • getPath()返回值:String
    得到对象所表示的文件或目录的完整路径
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
String a = f1.getPath(); // c:/1.txt
String b = f2.getPath(); // c:/a/b/c

  • length()返回值:long
    得到文件的大小(Byte)
File f = new File("c:/abc");
System.out.println(f.length());
文件的大小
  • isFile()返回值:boolean
    判断对象是否为文件
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
boolean a = f1.isFile(); // true
boolean b = f2.isFile(); // false
  • isDirectory()返回值:boolean
    判断对象是否为目录(文件夹)
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
boolean a = f1.isDirectory(); // false
boolean b = f2.isDirectory(); // true

  • isHidden()返回值:boolean
    判断对象是否为隐藏文件
    设置1.txt为隐藏
File f1 = new File("c:/1.txt");
File f2 = new File("c:/a/b/c");
boolean a = f1.isHidden(); // true
boolean b = f2.isHidden(); // false

  • list() 返回值:String[]
    返回某个路径下所有的子目录和子文件的字符串数组(只有直属于该目录的目录和文件才会被统计)
File f = new File("C:/Program Files/Java/jdk1.8.0_101");
String[] fs = f.list();
for(String t : fs) {
    System.out.println(t);
}

运行结果


运行结果
  • listFiles() 返回值:File[]
    返回某个路径下所有的子目录和子文件的文件对象数组(只有直属于该目录的目录和文件才会被统计)
File f = new File("C:/Program Files/Java/jdk1.8.0_101");
File[] fs = f.listFiles();
for(File t : fs) {
    System.out.println(t.getName()+"\t"+t.length()+"Byte");
}

运行结果


运行结果
4. 练习

在控制台上模拟windows系统的cmd窗口,并实现以下指令

  • cd xx 进入当前路径下的子目录xx,如果xx不存在则提示错误
  • cd.. 返回上一级目录,如果已经到达盘符根目录,则执行后没有效果
  • dir 显示当前路径下的所有子目录和文件,需要显示文件名,大小,文件/文件夹
    所有的指令都是忽略大小写都可以执行的

相关文章

网友评论

    本文标题:第17章 文件类

    本文链接:https://www.haomeiwen.com/subject/hrqmwqtx.html