天天看点

File操作小梳理

1关于file.isFile()与file.isDirectory()

错误以为若是Directory一定是file,file不一定是Directory

更正:file和Directory是两码事.只能是file或Directory中其中一个.

2并不是说我们执行一句File f=new File("F:\\x.txt");

在本地硬盘上就生成了一个x.txt文件.而应该进行如下的

操作才可以.

File f=new File("F:\\x.txt");

 if (!f.exists()) {

    f.createNewFile();

  }

其中f.createNewFile()表示创建了一个空文件

3 对于目录应该先执行file.mkdir(s)()才可以

往里面其下存入文件.比如:

File f=new File("F:\\test\\x.txt");

  if (!f.exists()) {

     f.createNewFile();

这当然要报错,因为x.txt的所在目录还不存在!!

所以应该改正为:

f.getParentFile().mkdirs();

if (!f.exists()) {

   f.createNewFile();

}

同样的道理

if (f.isFile()) {

   System.out.println("true");

}else{

   System.out.println("false");

结果为false

所以更好的实践体验,应该如下:

 File file=new File("E:\\zz\\xx\\123.txt");

 //1 首先判断其父文件是否存在,若不存在则创建

 //  不论其父路径有多复杂都会创建.

 //  比如E盘下根本就没有zz和xx

 //  但在此会按该层次创建

 if (!file.getParentFile().exists()) {

   file.getParentFile().mkdirs();

 }

 //2 再判断该文件是否存在,若不存在则创建

 if (!file.exists()) {

   try {

    file.createNewFile();

  } catch (IOException e) {

    e.printStackTrace();

   }

  }  

4 总结两种与File有关的两种操作思路

(1)

File f=new File("");

f.createNewFile();

然后对f操作.

这当然没有错,因为f已经被创建了

(2)file f=new File("");

然后用输入输出流进行流操作

例如:

File f=new File("F:\\test.txt");

FileOutputStream fos=new FileOutputStream(f);

String string="hello";

byte []b=string.getBytes();

fos.write(b, 0, b.length);  

疑问:

按照(1)中的思路没有执行f.createNewFile()为什么不报错???

因为输出流FileOutputStream已经做了该工作

修改例子即可知:

File f=new File("F:\\2221x.txt");

   System.out.println("true1");

} else {

   System.out.println("false1");

   System.out.println("true2");

   System.out.println("false2");

fos.write(b, 0, b.length);

输出false1,true2

即得到验证.