.String fileName="new .txt";
String dir="mydir1/mydir2";
File f=new File(dir,fileName);
当我直接
f.mkdirs();后
new .txt也变成了目录
而f.getParentFile().mkdirs();
只有mydir1/mydir2的目录
这个是为什么
首先,你不要被File给迷惑了,中文翻译是个文件的意思,但Java中它表示的是“文件和目录路径名的抽象表示形式”,也就是说File即可以是文件,也可以是目录路径名;
其次,File f=new File(dir,fileName); 这根据dir路径名字符串和fileName路径名字符串创建一个新 File实例,也就是说你认为fileName表示的是个文件, 而Java认为fileName可以是个文件和目录路径;
所以这样调用f.mkdirs(),就会创建f表示的路径名指定的目录(包括dir和fileName),因为你明确的要创建目录;
你在f.getParentFile().mkdirs()后,再f.createNewFile(),这样Java才知道你要创建一个fileName的文件;
public File(String parent, String child) { if (child == null) { throw new NullPointerException(); } if (parent != null) { if (parent.equals("")) { this.path = fs.resolve(fs.getDefaultParent(), fs.normalize(child)); } else { this.path = fs.resolve(fs.normalize(parent), fs.normalize(child)); } } else { this.path = fs.normalize(child); } this.prefixLength = fs.prefixLength(this.path); }
f.mkdirs();是以f为基准建立也就是说 f目录前面的都应该是目录,包括他,以此类推:f.getParent().mkdirs()是以 f.getParent()为基准建立,包括f.getParent()(这里可以把f.getParent()看做是第一种情况中的 f )。