黑马程序员--java基础之IO流(二)
File体系概况:
1、可以将已有的或者未出现的文件或者文件夹封装成一个对象;
练习一:File构造函数的演示
File 中有个特有的跨平台方法,是用来替换分隔符的,static String separator
也就是说"\\"可以用File.separator()来替换
1
2
3
4
5
6
7
8
9
10
|
class FileTest{ public static void main( String [] args){ File f1 = new File( "E:\\workspace\\" , "***.java" ); //构造函数一:File(String parent, String child) File f2 = new File( "***.java" ); //构造函数二:File(String pathname) File dir = new File( "E:\\workspace\\" ); //构造函数三:File(File parent, String child) File f3 = new File(d, "***.java" ) } } |
练习二:File中的常见方法演示
1、创建
|--boolean createNewFile();会发生异常IOException.
在指定位置创建文件,如果文件存在则返回false
与输出流不同,输出流一旦建立对象,就会创建文件,如果存在则会覆盖;
|--static File createTempFile(String prefix, String suffix);可以创建一个临时文件
|--boolean mkdir();创建目录
|--boolean mkdir();创建多级目录
2、删除
|--boolean delete();删除未成功,返回false;
|--deleteOnExit(); 在程序退出时删除文件;
3、判断
|--boolean exists();判断文件是否存在;
|--isDirectory();在调用该方法时必须先调用上一方法;
|--isFile();在调用该方法时必须先调用上一方法;
|--isHidden();
|--isAbsolute();判断是否是绝对路径
4、获取
|--getName();
|--String getParent()该方法返回的是文件的绝对路径中的父目录,或是该文件所在的上一层目录,如果File对象中没指定绝对路径或者上一层目录, 返回null;
|--getPath();File对象中封装的是什么路径就获取什么路径;
|--File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
|--String getAbsolutePath() 返回此抽象路径名的绝对路径名形式。
|--renameTo(File f);改名
|--static File[] listRoots() 列出可用的文件系统根。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class FileTest{ public static void main( String [] args){ File file = new File( "hehe.java" ); try { System.out.println(file.createNewFile()); //创建并返回boolean System.out.println(file. delete ()); } catch (IOException e) { System.out.println(e.toString()); } } } |
练习三:打印c盘文件下的目录
提示:用到list方法,返回一个字符串数组,用高级for循环读取;
一般用listFiles方法,返回的是File对象,可以调用File的方法
1
2
3
4
5
6
7
8
9
10
|
class FileTest { public static void main( String [] args){ File file = new File( "C:\\" ); //将目录封装成对象,可以返回目录下的所有文件名; String [] str = file.list(); for ( String name:str){ System.out.println(name); } } } |
练习四:打印一个目录下所有的java文件
提示:用到list(Filefilter filter)方法,返回字符串数组,参数为一个自定义过滤器
一般用listFiles(Filefilter filter)方法,该方法返回的是File对象,可以调用File中的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class FileTest { public static void main( String [] args){ File dir = new File( "E:\\workspace\\notes\\" ); String [] names = dir.list( new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith( ".java" ); } }); for ( String name:names){ System.out.println(name); } } } |
练习五:打印出该目录下所有文件和文件夹,包括子文件夹,带层次;
提示:1、目录中如果有子目录,就会继续进去遍历,用到的还是原来的方法,所以直接调用本方法,该编程方法为递归法
2、用递归法时需要注意条件的限定,不然容易出现内存溢出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class FileTest { public static void main( String [] args) { File dir = new File( "E:\\workspace\\" ); showDir(dir, 0 ); } public static String getLevel( int level) { StringBuilder sb = new StringBuilder(); for ( int i= 0 ; i<level; i++) { sb.append( " " ); } return sb.toString(); } public static void showDir(File dir, int level) { System.out.println(getLevel(level)+ dir.getName()); File [] files = dir.listFiles(); level++; for ( int i= 0 ; i<files.length; i++) { if (files[i].isDirectory()) showDir(files[i],level); else System.out.println(getLevel(level)+files[i]); } } } |
练习六:将指定目录下的所有.java文件生成一个目录列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
class FileTest { public static void main( String [] args) { //将目录封装成对象 File dir = new File( "E:\\workspace\\" ); //创建一个列表存放目录 List<File> list = new ArrayList<File>(); //调用自定义方法将文件目录写到列表 fileToList(dir,list); //调用自定义方法将目录写到本地文本 writeToFile(list, "java.txt" ); } public static void fileToList(File dir,List<File> list) { //获取File对象 File [] files = dir.listFiles(); //高级循环遍历 for (File file : files){ if (file.isDirectory()) fileToList(file,list); else { if (file.getName().endsWith( ".java" )) list.add(file); } } } public static void writeToFile(List<File> list, String txt){ BufferedWriter bw = null ; try { //输出流写入文本 bw = new BufferedWriter( new FileWriter(txt)); for (File f : list){ String path = f.getAbsolutePath(); bw.write(path); bw.newLine(); bw.flush(); } } catch (IOException e) { System.out.println(e.toString()); } finally { try { if (bw == null ) bw.close(); } catch (IOException e) { System.out.println(e.toString()); } } } } |