import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import java.text.SimpleDateFormat; import java.util.Date; /* * 文件和目录路径名的抽象表示形式 * File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。 */ public class TestFile { public static void main(String[] args) { // 构造 File f = new File("D:\\baidu player"); File f2 = new File("D:\\baidu player\\目录说明.txt"); File f3 = new File("D:\\baidu player\\baidu playe"); File f4 = new File("D:\\baidu player\\a.txt"); File f5 = new File("b.txt"); File f6 = new File("D:\\Tencent"); // 属性 /* * 与系统有关的路径分隔符 在 UNIX 系统上,此字段为 ':';在 Microsoft Windows 系统上,它为 ';'。 */ System.out.println("1:" + File.pathSeparatorChar); System.out.println("2:" + File.pathSeparator); /* * 与系统有关的默认名称分隔符。此字段被初始化为包含系统属性 file.separator 值的第一个字符。 在 UNIX * 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\\'。 */ System.out.println("3:" + File.separatorChar); System.out.println("4:" + File.separator); // 方法 /* * 测试应用程序是否可以执行此抽象路径名表示的文件 */ System.out.println("5:" + f3.canExecute()); /* * 测试应用程序是否可以读取此抽象路径名表示的文件 */ System.out.println("6:" + f.canRead()); /* * 测试应用程序是否可以修改此抽象路径名表示的文件 */ System.out.println("7:" + f.canWrite()); /* * 按字母顺序比较两个抽象路径名 */ System.out.println("8:" + f.compareTo(f2)); /* * 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件 如果指定的文件不存在并成功地创建,则返回 * true;如果指定的文件已经存在,则返回 false 如果文件路径不存在则报错,它是不会自己创建文件夹的。 */ try { System.out.println("9:" + f4.createNewFile()); } catch (IOException e) { e.printStackTrace(); } /* * 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称 * C:\Users\ADMINI~1\AppData\Local\Temp\abc5321169167421927032123 */ try { System.out.println("10:" + File.createTempFile("abc", ".txt")); } catch (IOException e) { e.printStackTrace(); } /* * 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称 如果文件路径不存在则报错,它是不会自己创建文件夹的。 * abc7784099685457435368123 */ try { System.out.println("11:" + File.createTempFile("abc", ".txt", f)); } catch (IOException e) { e.printStackTrace(); } /* * 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。 */ System.out.println("12:" + f.delete()); /* * 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 文件(或目录)将以与注册相反的顺序删除。 * 调用此方法删除已注册为删除的文件或目录无效。根据 Java 语言规范中的定义,只有在虚拟机正常终止时,才会尝试执行删除操作。 * 一旦请求了删除操作,就无法取消该请求。所以应小心使用此方法。 */ f.deleteOnExit(); /* * 测试此抽象路径名与给定对象是否相等。当且仅当该参数不是 null,而是一个与此抽象路径名表示相同的文件或目录的抽象路径名时,返回 * true。 两个抽象路径名是否相等取决于底层系统。在 UNIX 系统上,比较路径名时,字母大小写通常很重要, 而在 Microsoft * Windows 系统上,这通常不重要。 */ System.out.println("14:" + f.equals(f2)); /* * 测试此抽象路径名表示的文件或目录是否存在 */ System.out.println("15:" + f3.exists()); /* * 返回此抽象路径名的绝对路径名形式。等同于 new File(this.getAbsolutePath())。 */ System.out.println("16:" + f5.getAbsoluteFile()); /* * 返回此抽象路径名的绝对路径名字符串。 如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。 * 如果此抽象路径名是空抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。 * 否则,使用与系统有关的方式解析此路径名。 */ System.out.println("17:" + f5.getAbsolutePath()); /* * 返回此抽象路径名的规范形式。等同于 new File(this.getCanonicalPath())。 */ try { System.out.println("18:" + f5.getCanonicalFile()); } catch (IOException e) { e.printStackTrace(); } /* * 返回此抽象路径名的规范路径名字符串。 * 规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换为绝对路径名, 这与调用 * getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。 * 这通常涉及到从路径名中移除多余的名称(比如 "." 和 "..")、解析符号连接(对于 UNIX 平台), * 以及将驱动器号转换为标准大小写形式(对于 Microsoft Windows 平台)。 */ try { System.out.println("19:" + f5.getCanonicalPath()); } catch (IOException e) { e.printStackTrace(); } /* * 返回此抽象路径名指定的分区中未分配的字节数。 * 返回的未分配字节数是一个提示,而不是一个保证,只能使用这些字节的一部分。未分配字节数很可能在此调用后立即与实际相符。 */ System.out.println("20:" + f.getFreeSpace() / 1024 / 1024 / 1024 + "G"); /* * 返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串 * 直接根据路径名截取,不考虑该路径或目录是否存在 */ System.out.println("21:" + f3.getName()); /* * 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 抽象路径名的父 * 路径名由路径名的前缀(如果有),以及路径名名称序列中最后一个名称以外的所有名称组成。 如果名称序列为空,那么该路径名没有指定父目录。 * 直接根据路径名截取,不考虑该路径或目录是否存在 */ System.out.println("22:" + f3.getParent()); /* * 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 与上面方法的区别就是,这个有返回File对象 */ System.out.println("23:" + f3.getParent()); /* * 将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔名称序列中的名称 */ System.out.println("24:" + f3.getPath()); /* * 返回此抽象路径名指定的分区大小(包含已用的空间)。 */ System.out .println("25:" + f.getTotalSpace() / 1024 / 1024 / 1024 + "G"); /* * 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。若有可能,此方法将检查写权限和其他操作系统限制, 因此与 getFreeSpace() * 相比,此方法能更准确地估计可实际写入的新数据数。 */ System.out.println("26:" + f.getUsableSpace() / 1024 / 1024 / 1024 + "G"); /* * 计算此抽象路径名的哈希码。因为抽象路径名的相等性与系统有关,所以对其哈希码的计算也与系统有关。 */ System.out.println("27:" + f.hashCode()); /* * 测试此抽象路径名是否为绝对路径名。绝对路径名的定义与系统有关。在 UNIX 系统上,如果路径名的前缀是 "/", * 那么该路径名是绝对路径名。在 Microsoft Windows 系统上,如果路径名的前缀是后跟 "\\" 的盘符,或者是 "\\\\", * 那么该路径名是绝对路径名 */ System.out.println("28:" + f5.isAbsolute()); /* * 测试此抽象路径名表示的文件是否是一个目录 */ System.out.println("29:" + f.isDirectory()); /* * 测试此抽象路径名表示的文件是否是一个标准文件。如果该文件不是一个目录,并且满足其他与系统有关的标准,那么该文件是标准 文件。 由 Java * 应用程序创建的所有非目录文件一定是标准文件 */ System.out.println("30:" + f4.isFile()); /* * 测试此抽象路径名指定的文件是否是一个隐藏文件。隐藏 的具体定义与系统有关。在 UNIX 系统上,如果文件名以句点字符 ('.') 开头, * 则认为该文件被隐藏。在 Microsoft Windows 系统上,如果在文件系统中文件被标记为隐藏,则认为该文件被隐藏。 */ System.out.println("31:" + f.isHidden()); /* * 返回此抽象路径名表示的文件最后一次被修改的时间 */ System.out.println("32:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(f .lastModified())); /* * 返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。以字节为单位 */ System.out.println("33:" + f4.length()); /* * 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 如果此抽象路径名不表示一个目录,那么此方法将返回 * null。否则返回一个字符串数组,每个数组元素对应目录中的每个文件或目录。 * 表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。 * 不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现 */ String str[] = f.list(); for (String s : str) { System.out.println("34:" + s); } /* * 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 如果此抽象路径名不表示一个目录,那么此方法将返回 * null。否则返回一个字符串数组,每个数组元素对应目录中的每个文件或目录。 * 表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。 * 不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现 */ String str2[] = f.list(new FilenameFilter() { public boolean accept(File dir, String name) { return (name.endsWith(".txt")); } }); for (String s : str2) { System.out.println("35:" + s); } /* * 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。如果此抽象路径名不表示一个目录,那么此方法将返回 null。 * 否则返回一个 File 对象数组,每个数组元素对应目录中的每个文件或目录。表示目录本身及其父目录的名称不包括在结果中。 * 得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String) 构造方法构造的。所以,如果此路径名是绝对路径名, * 那么得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,那么得到的每个路径名都是相对于同一目录的路径名 */ File fs[] = f6.listFiles(); for (File fTemp : fs) { System.out.println("36:" + fTemp); } /* * 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的路径名必须满足过滤器外, * 此方法的行为与 listFiles() 方法相同。如果给定 filter 为 null,则接受所有路径名。否则,当且仅当在此抽象路径名及其表示 * 的目录中的文件名或目录名上调用过滤器的 FilenameFilter.accept(java.io.File, java.lang.String) * 方法返回 true 时,该路径名才满足过滤器。 */ File fs2[] = f.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return (name.endsWith(".txt")); } }); for (File fTemp : fs2) { System.out.println("37:" + fTemp); } /* * 列出可用的文件系统根。 * 特定 Java 平台可以支持零个或更多个分层组织的文件系统。每个文件系统有一个 root 目录,可以从这里到达文件系统中的所有其他文件。 * 例如,Windows 平台为每个活动驱动器提供了一个根目录;UNIX 平台只有一个根目录,即 "/"。可用文件系统根的设置受各种系统级操 * 作的影响,比如可移动介质的插入和弹出,以及断开或卸载那些物理磁盘或虚拟磁盘 */ File fs3[] = File.listRoots(); for (File fTemp : fs3) { System.out.println("38:" + fTemp); } /* * 创建此抽象路径名指定的目录。 当且仅当已创建目录时,返回 true;否则返回 false */ File f7 = new File("D:\\baidu player\\temp2"); System.out.println("39:" + f7.mkdir()); /* * 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。 */ File f8 = new File("D:\\baidu playe2\\temp2"); System.out.println("40:" + f8.mkdirs()); /* * 重新命名此抽象路径名表示的文件。 此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统, * 该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。 */ File f9 = new File("D:\\baidu playe\\temp1"); f9.renameTo(f8); /* * 设置此抽象路径名所有者执行权限的一个便捷方法 */ File f10 = new File("D:\\baidu playe2\\temp2"); f10.setExecutable(true,true); /* * 设置此抽象路径名指定的文件或目录的最后一次修改时间。 所有平台都支持将文件修改时间设置为最接近的秒数,而且一些平台会提供更精确的值。 * 该参数将被截取,以满足受支持的精度。如果该操作成功,并且没有在文件上发生其他干扰操作, * 则下一次调用 lastModified() 方法将返回传递给此方法的 time 参数(可能被截取)。 */ f10.setLastModified(new Date().getTime()); /* * 设置此抽象路径名所有者读权限的一个便捷方法 */ f10.setReadable(true,true); /* * 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。调用此方法后,可以保证在被删除或被标记为允许写访问之前,文件或目录不会发生更改。 * 是否可以删除某个只读文件或目录则取决于底层系统。 */ f4.setReadOnly(); /* * 设置此抽象路径名所有者写权限的一个便捷方法 * 参数如果为 true,则设置允许写操作的访问权限;如果为 false,则不允许写操作 */ f4.setWritable(true); /* * 返回此抽象路径名的路径名字符串。该字符串就是 getPath() 方法返回的字符串。 */ System.out.println("47:" + f4.toString()); /* * 构造一个表示此抽象路径名的 file: URI。 * 该 URI 的具体形式与系统有关。如果可以确定此抽象路径名表示的文件是一个目录, 那么所得 URI 将以斜杠结束。 */ URI url = f3.toURI(); try { System.out.println("48:" + url.toURL()); } catch (MalformedURLException e) { e.printStackTrace(); } } }
?
1:; 2:; 3:\ 4:\ 5:false 6:true 7:true 8:-9 9:false 10:C:\Users\ADMINI~1\AppData\Local\Temp\abc8531341886874733185.txt 11:D:\baidu player\abc6465852116087451369.txt 12:false 14:false 15:false 16:E:\workspace-1\chuji\b.txt 17:E:\workspace-1\chuji\b.txt 18:E:\workspace-1\chuji\b.txt 19:E:\workspace-1\chuji\b.txt 20:151G 21:baidu playe 22:D:\baidu player 23:D:\baidu player 24:D:\baidu player\baidu playe 25:153G 26:151G 27:1382810589 28:false 29:true 30:true 31:false 32:2013-12-31 20:38:12 33:4 34:a.txt 34:temp 34:temp2 34:abc1016573117325461966.txt 34:abc1903092529072740373.txt 34:abc3727031614599018463.txt 34:abc6114372255024419057.txt 34:abc7053910021250116394.txt 34:abc6679654278881185451.txt 34:abc6465852116087451369.txt 35:a.txt 35:abc1016573117325461966.txt 35:abc1903092529072740373.txt 35:abc3727031614599018463.txt 35:abc6114372255024419057.txt 35:abc7053910021250116394.txt 35:abc6679654278881185451.txt 35:abc6465852116087451369.txt 36:D:\Tencent\QQ 36:D:\Tencent\QQPlayer 37:D:\baidu player\a.txt 37:D:\baidu player\abc1016573117325461966.txt 37:D:\baidu player\abc1903092529072740373.txt 37:D:\baidu player\abc3727031614599018463.txt 37:D:\baidu player\abc6114372255024419057.txt 37:D:\baidu player\abc7053910021250116394.txt 37:D:\baidu player\abc6679654278881185451.txt 37:D:\baidu player\abc6465852116087451369.txt 38:C:\ 38:D:\ 38:E:\ 38:F:\ 38:G:\ 39:false 40:false 47:D:\baidu player\a.txt 48:file:/D:/baidu%20player/baidu%20playe
?