黑马程序员--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()); } } }} |

浙公网安备 33010602011771号