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的所在目录还不存在!!
所以应该改正为:
File f=new File("F:\\test\\x.txt");
f.getParentFile().mkdirs();
if (!f.exists()) {
   f.createNewFile();
}
同样的道理
File f=new File("F:\\test\\x.txt");
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");
if (f.isFile()) {
   System.out.println("true1");
} else {
   System.out.println("false1");
}
FileOutputStream fos=new FileOutputStream(f);
if (f.isFile()) {
   System.out.println("true2");
} else {
   System.out.println("false2");
}
String string="hello";
byte []b=string.getBytes();
fos.write(b, 0, b.length);
输出false1,true2
即得到验证.

你可能感兴趣的:(File操作小梳理)