java io流总结二

Posted hailangyoudianlang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java io流总结二相关的知识,希望对你有一定的参考价值。

转载【赵彦军的博客】 http://blog.csdn.net/zhaoyanjun6/article/details/54292148 

File类的构造函数有6个,6个构造函数,可以分为2类。4个公共构造函数,2个私有构造函数。

  • public File(String pathname) //文件的绝对路径
  • public File(URI uri) //文件的URI地址
  • public File(String parent, String child) //指定父文件绝对路径、子文件绝对路径
  • public File(File parent, String child) //指定父文件、子文件相对路径 //

下面这两个是File类中私有的构造函数,外面不能调用

  • private File(String child, File parent) private File(String pathname, int prefixLength)

构造函数1:

1 //电脑d盘中的cat.png 图片的路径
2 String filePath1 = "D:/cat.png" ;
3 File file = new File( filePath1 ) ;

构造函数2:

 1 String parentFilePath = "E:/cat" ;
 2 
 3 String childFilePath = "small_cat.txt" ;
 4 
 5 //创建parentFile文件
 6 File parentFile = new File( parentFilePath ) ;
 7 parentFile.mkdir() ;
 8 
 9 //如果parentFile不存在,就会报异常
10 File file = new File( parentFilePath  , childFilePath ) ;
11 
12 try {
13     file.createNewFile() ;
14 } catch (IOException e) {
15     e.printStackTrace();
16 }

效果图:

技术分享图片

 

构造函数3:

 1 String parentFilePath = "E:/cat" ;
 2 
 3 //构造父文件
 4 File parent = new File( parentFilePath ) ;
 5 parent.mkdir(); 
 6 
 7 //如果parent文件不存在,就会报异常
 8 File file = new File( parent  , "small_cat.txt" ) ;
 9 
10 try {
11     file.createNewFile() ;
12 } catch (IOException e) {
13     e.printStackTrace();
14 }

效果图: 

技术分享图片

 

  • 创建目录
1 boolean  file.mkdirs() 

如果创建成功,返回 true , 创建失败,返回false。如果这个文件夹已经存在,则返回false
只能创建一级目录,如果父目录不存在,返回false.

  • 创建多级目录
1 boolean  file.mkdirs() 

创建多级目录,创建成功,返回true,创建失败,返回false。如果父目录不存在,就创建,并且返回true.

技术分享图片

 

  • 创建一个新的文件
1 boolean file.createNewFile() ;

如果文件不存在就创建该文件,创建成功,返回 true ;创建失败,返回false。如果这个文件已经存在,则返回false.

  • 判断方法
 1 boolean file.exists() //文件是否存在
 2 
 3 boolean file.isFile() //是否是文件
 4 
 5 boolean file.isDirectory() //是否是目录
 6 
 7 boolean file.isHidden()   //是否隐藏(windows上可以设置某个文件是否隐藏)
 8 
 9 boolean file.isAbsolute() //是否为绝对路径
10 
11 boolean file.canRead()  //是否可读
12 
13 boolean file.canWrite() //是否可写
14 
15 boolean file.canExecute()  //是否可执行

获取文件的信息

 1 String file.getName() //获取文件的名字,只是名字,没有路径
 2 
 3 String file.getParent() //获取父目录的绝对路径,返回值是一个字符串。如果文件有父目录,那么返回父目录的绝对路径,(比如:`E:\cat`) , 如果文件本身就在磁盘的根目录,那么返回磁盘的路径,(比如:`E:\`)。
 4 
 5 File file.getParentFile() //获取父文件,返回值是一个File对象。
 6 
 7 long time = file.lastModified() ; //返回文件最后一次修改的时间
 8 Date dt = new Date(time);
 9 
10 boolean renameTo(File file) //文件命名
11 
12 long file.length() //返回文件的大小,单位字节
13 
14 boolean file.delete() //删除文件
15 
16 String[] file.list() //获取该目录下的所有的文件的名字。如果`file`为文件,返回值为`null`,在使用时记得判空;但是如果`file`为目录,那么返回这个目录下所有文件的名字,只是名字,不含路径;如果`file`是一个空目录,返回一个长度为0的数组;从上面的结果可以看出,`list()` 方法,只是对`file`为目录时有效,当`file`为一个文件的时候,该方法毫无意义。
17 
18 File[] file.listFiles() //获取该目录下的所有的文件。如果`file`为文件,返回值为`null`,在使用时记得判空;但是如果`file`为目录,那么返回这个目录下所有的文件 ;如果`file`是一个空目录,返回一个长度为0的数组;从上面的结果可以看出,`listFiles()` 方法,只是对`file`为目录时有效,当`file`为一个文件的时候,该方法毫无意义。

实战经验1: file.list() , file.listFiles()

 1 String filePath = "E:/cat" ;
 2 File file = new File( filePath ) ;
 3 file.mkdir() ;
 4 
 5 String[] names = file.list() ;
 6 
 7 for( int i = 0 ; i < names.length ; i++ ){
 8     System.out.println( "names: " +names[i]);
 9 }
10 
11 File[] files = file.listFiles() ;
12 for( int i = 0 ; i < files.length ; i++ ){
13     System.out.println( "files: "+ files[i].getAbsolutePath() );
14 }

效果图:

技术分享图片

 

实战经验2:扫描F盘所有的文件

 1 public class A3 {
 2 
 3     public static void main(String[] args) throws IOException {
 4 
 5         String filePath = "F:/" ;
 6         File file = new File( filePath ) ;
 7         getFile(file);
 8 
 9     }
10 
11 
12     private static void getFile( File file ){
13         File[] files = file.listFiles() ;
14         for( File f : files ){
15             if ( f.isHidden() ) continue ;
16 
17             if(f.isDirectory() ){
18                 getFile( f );               
19             }else{
20                 System.out.println( f.getAbsolutePath()  + "  " + f.getName() );
21             }
22         }
23     }
24 }

 

效果图:

技术分享图片

在上面的实战演练中用到了,file.list() , file.listFiles() 。这是两个无参的方法,实际上还有两个有参的方法,分别是

1 file.list(FilenameFilter filter) ;
2 
3 file.listFiles( FilenameFilter filter) ;
4 
5 file.listFiles(FileFilter filter)

FileFilter

FileFilter是io包里面的一个接口,从名字上可以看出,这个类是文件过滤功能的。 
需要重写accept方法 

 1 static class MyFileFilter implements FileFilter {
 2 
 3 MyFileFilter(){         
 4 }
 5 
 6 //pathname:文件的绝对路径+ 文件名 , 比如:F:\安来宁 - 难得.mp3  , 或者: F:\文件夹1
 7 @Override
 8 public boolean accept(File pathname) {
 9     return false;
10 }   
11 }

实战:获取指定目录的所有文件夹

 1 package com.app;
 2 import java.io.File;
 3 import java.io.FileFilter;
 4 import java.io.IOException;
 5 
 6 
 7 public class A3 {
 8 
 9     public static void main(String[] args) throws IOException {
10 
11         String filePath = "F:/" ;
12         File file = new File( filePath ) ;
13         getFile(file);
14 
15     }
16 
17 
18     /**
19      * 获取指定目录的所有文件夹
20      * @param file
21      */
22     private static void getFile( File file ){
23         MyFileFilter myFileFilter = new MyFileFilter() ;
24 
25         File[] files = file.listFiles( myFileFilter ) ;
26         for( File f : files ){
27             if ( f.isHidden() ) continue ;
28 
29             System.out.println( f.getAbsolutePath() );
30         }
31     }
32 
33 
34     static class MyFileFilter implements FileFilter {
35 
36         MyFileFilter(){
37 
38         }
39 
40         //pathname:文件的绝对路径+ 文件名 , 比如:F:\安来宁 - 难得.mp3  , 或者: F:\文件夹1
41         @Override
42         public boolean accept(File pathname) {
43             if( pathname.isDirectory() ){
44                 return true ;
45             }
46             return false;
47         }
48 
49     }
50 
51 }

 

FilenameFilter

FileFilter是io包里面的一个接口,从名字上可以看出,这个类是文件名字过滤功能的。 
需要重写里面的accept方法。 
比如:

 1 package com.app;
 2 
 3 import java.io.File;
 4 import java.io.FilenameFilter;
 5 
 6 public class MyFilenameFilter implements FilenameFilter {
 7     //type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件
 8     private String type;           
 9     MyFilenameFilter( String type){
10         this.type = type ;
11     }
12 
13     @Override
14     public boolean accept(File dir, String name) {
15         //dir表示文件的当前目录,name表示文件名;
16         return name.endsWith( type ) ;
17     }
18 
19 }

实战:扫描出指定路径的所有图片

 1 package com.app;
 2 import java.io.File;
 3 import java.io.FilenameFilter;
 4 import java.io.IOException;
 5 
 6 
 7 public class A3 {
 8 
 9     public static void main(String[] args) throws IOException {
10 
11         String filePath = "F:/" ;
12         File file = new File( filePath ) ;
13         getFile(file);
14 
15     }
16 
17 
18     /**
19      * 扫描出指定路径的所有图片
20      * @param file
21      */
22     private static void getFile( File file ){
23         MyFilenameFilter myFileFilter = new MyFilenameFilter( ".png") ;
24 
25         File[] files = file.listFiles( myFileFilter ) ;
26         for( File f : files ){
27             if ( f.isHidden() ) continue ;
28 
29             System.out.println( f.getAbsolutePath() );
30         }
31     }
32 
33 
34 
35     static class MyFilenameFilter implements FilenameFilter {
36         //type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件
37         private String type;           
38         MyFilenameFilter( String type){
39             this.type = type ;
40         }
41 
42         @Override
43         public boolean accept(File dir, String name) {
44             //dir表示文件的当前目录,name表示文件名;
45             return name.endsWith( type ) ;
46         }
47 
48     }
49 
50 }

运行结果: 

技术分享图片

 





以上是关于java io流总结二的主要内容,如果未能解决你的问题,请参考以下文章

java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

用 Java 的 IO 流进行读写文件操作

Java之IO流总结

Java实现图片验证码功能,存储到io流之中

Java-IO流总结