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
即得到验证.