|
5 | 5 | import java.io.File; |
6 | 6 | import java.io.FileInputStream; |
7 | 7 | import java.io.FileOutputStream; |
| 8 | +import java.io.FilenameFilter; |
8 | 9 | import java.io.IOException; |
9 | 10 | import java.io.InputStreamReader; |
10 | 11 | import java.io.OutputStreamWriter; |
| 12 | +import java.nio.file.Path; |
| 13 | +import java.nio.file.Paths; |
11 | 14 |
|
12 | 15 | public class FileTest { |
13 | 16 | public static void main (String[] args) throws IOException { |
14 | 17 |
|
15 | | - |
| 18 | + /* |
| 19 | + * 注意Windows平台使用\作为路径分隔符,在Java字符串中需要用\\表示一个\。Linux平台使用/作为路径分隔符: |
| 20 | + * 可以用.表示当前目录,..表示上级目录。 |
| 21 | + * File对象有3种形式表示的路径,一种是getPath(),返回构造方法传入的路径,一种是getAbsolutePath(),返回绝对路径, |
| 22 | + * 一种是getCanonicalPath,它和绝对路径类似,但是返回的是规范路径。 |
| 23 | + */ |
| 24 | + |
| 25 | + File wf = new File("C:\\Windows\\notepad1.exe"); |
| 26 | + System.out.println("删除文件:" + wf.delete()); |
| 27 | + |
| 28 | + File linuxF = new File("/usr/bin/javac"); |
| 29 | + |
| 30 | + File ff = new File(".."); |
| 31 | + System.out.println("..:" + ff.getPath()); |
| 32 | + System.out.println("绝对路径:" + ff.getAbsolutePath()); |
| 33 | + System.out.println("规范路径:" + ff.getCanonicalPath()); |
| 34 | + |
| 35 | + System.out.println("文件是否可读:" + ff.canRead()); |
| 36 | + System.out.println("文件是否可写(对目录而言,是否可执行表示能否列出它包含的文件和子目录。):" + ff.canWrite()); |
| 37 | + System.out.println("文件是否执行:" + ff.canExecute()); |
| 38 | + System.out.println("文件字节大小:" + ff.length()); |
| 39 | + |
| 40 | + File f = File.createTempFile("temp-", ".txt");//创建一个临时文件 |
| 41 | + f.deleteOnExit();//VM退出时自动删除 |
| 42 | + System.out.println("临时文件的路径:" + f.getAbsolutePath()); |
| 43 | + |
| 44 | + //因为Windows和Linux的路径分隔符不同,File对象有一个静态变量用于表示当前平台的系统分隔符: |
| 45 | + System.out.println("根据当前平台打印" + File.separator);// 根据当前平台打印"\"或"/" |
| 46 | + |
16 | 47 | File file = new File("file.txt"); |
17 | 48 | System.out.println("判断路径是否是一个文件" + file.isFile()); |
18 | 49 |
|
| 50 | + |
| 51 | + |
19 | 52 | //下面这个俩个构造方法是一个意思 |
20 | 53 | //File file = new File("d:\\javaio\\file.txt"); |
21 | 54 | //File file = new File("fd:\\javaio", "file.txt"); |
@@ -65,5 +98,43 @@ public static void main (String[] args) throws IOException { |
65 | 98 | in.close(); |
66 | 99 | System.out.println(file.getAbsolutePath() + "存在"); |
67 | 100 | } |
| 101 | + |
| 102 | + //当File对象表示一个目录时,可以使用list()和listFiles()列出目录下的文件和子目录名。listFiles()提供了一系列重载方法,可以过滤不想要的文件和目录: |
| 103 | + File flist = new File("C:\\Windows"); |
| 104 | + File[] fs1 = flist.listFiles(); |
| 105 | + printFiles(fs1); |
| 106 | + |
| 107 | + File[] fs2 = flist.listFiles(new FilenameFilter(){ |
| 108 | + @Override |
| 109 | + public boolean accept(File dir, String name){ |
| 110 | + return name.endsWith(".exe"); |
| 111 | + } |
| 112 | + }); |
| 113 | + printFiles(fs2); |
| 114 | + |
| 115 | + //Java标准库还提供了一个Path对象,它位于java.nio.file包。Path对象和File对象类似,但操作更加简单: |
| 116 | + //如果需要对目录进行复杂的拼接、遍历等操作,使用Path对象更方便。 |
| 117 | + Path p1 = Paths.get(".", "project", "strudy");// 构造一个Path对象 |
| 118 | + System.out.println("Paht:" + p1); |
| 119 | + Path p2 = p1.toAbsolutePath();//转换为绝对路径 |
| 120 | + System.out.println(p2); |
| 121 | + Path p3 = p2.normalize();// 转换为规范路径 |
| 122 | + System.out.println(p3); |
| 123 | + File fp = p3.toFile();//转换为File对象 |
| 124 | + System.out.println(fp); |
| 125 | + for (Path p: Paths.get("..").toAbsolutePath()) { |
| 126 | + System.out.println("可以直接遍历p:" + p); |
| 127 | + } |
| 128 | + |
| 129 | + } |
| 130 | + |
| 131 | + static void printFiles(File[] files) { |
| 132 | + System.out.println("============="); |
| 133 | + if (files != null) { |
| 134 | + for (File f: files) { |
| 135 | + System.out.println(f); |
| 136 | + } |
| 137 | + } |
| 138 | + System.out.println("============="); |
68 | 139 | } |
69 | 140 | } |
0 commit comments