最近在项目中想使用相对路径存放上传的apk包,所以研究了一下相对路径创建File的相关知识
1 参考以前的代码,写下如下代码:
public static void main(String[] args) throws IOException {
File parentFile = new File("/intelStore/apk/test");
if (!parentFile.exists()) {
parentFile.mkdir();
}
System.out.println(parentFile.getAbsolutePath());
File newFile = new File("/intelStore/apk/my.txt");
if (!newFile.exists()) {
newFile.createNewFile();
}
System.out.println(newFile.getAbsolutePath());
}
打印结果:
F:\intelStore\apk\test
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
在以前的项目中此段代码不会报错,自己写测试的时候会报错,在创建my.txt文件时会提示不存在此路径,可是代码已经创建父路径的文件夹了啊,然后单独允许如下代码:
public static void main(String[] args) throws IOException {
File parentFile = new File("/intelStore/apk/test");
if (!parentFile.exists()) {
parentFile.mkdir();
}
System.out.println(parentFile.getAbsolutePath());
}
打印结果:
F:\intelStore\apk\test
到F盘去查看根本没有生成intelStore文件夹,仔细考虑了下,可能是java无法创建一个多层均不存在的文件夹目录,
然后运行如下的代码:
File parentFile = new File("/intelStore/apk/test");
if (!parentFile.exists()) {
parentFile.mkdir();
}
System.out.println(parentFile.getAbsolutePath());
}
发现此时可以创建文件夹intelStore,说明上面的猜想是对的,于是写了一个递归方法,去创建这样多层不存在的文件夹:
public static void createFile (File file) {
if (!Objects.equals(file, null)) {
createFile(file.getParentFile());
if (!file.exists()) {
file.mkdir();
}
}
}
2 相对路径
看网上说在Eclipse里创建相对路径的文件夹,文件夹的绝对路径为:workspace路径+ 项目+ 相对路径,可是经我测试如下代码:
public static void main(String[] args) throws IOException {
File parentFile = new File("/intelStore/apk/test");
System.out.println(parentFile.getAbsolutePath());
createFile(parentFile);
}
打印结果为:
F:\intelStore\apk\test
上面代码执行以后确实在F盘下创建了对应的文件夹
我项目的workspace路径为:F:\newWorkspace\readLocalPhoto,也就是说绝对路径并没有创建在workspace里的项目文件夹下,而是在项目所在根路径下创建的相对路径
关于在tomcat里的web项目里运行此代码,网上很多人的说法是,会在tomcat的bin路径下创建相对路径,我在一个servlet里运行如下代码,
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
File parentFile = new File("/intelStore/apk/test");
System.out.println(parentFile.getAbsolutePath());
createFile(parentFile);
}
结果:
D:\intelStore\apk\test
并且在D盘下找到了创建的路径
我的tomcat的路径在D盘下的某个文件夹,所以我感觉在tomcat的web里运行,相对路径应该创建在tomcat所在根目录下创建相对路径
3 File Path
在创建相对路径的File时,想使用jdk新特性Path来进行相关操作,代码如下:
public static void main(String[] args) throws IOException {
Path path = Paths.get("/intelStore/apk/test");
System.out.println(path.toFile().getAbsolutePath());
createFile(path);
}
public static void createFile(Path path) {
int nameCount = path.getNameCount();
for (int index = 0; index < nameCount; index++) {
System.out.println(path.getName(index).toFile().getAbsolutePath());
}
}
打印结果:
F:\intelStore\apk\test
F:\newWorkspace\NIODemo\intelStore
F:\newWorkspace\NIODemo\apk
F:\newWorkspace\NIODemo\test
通过上面的代码发现,在使用相对路径的File和Path相互转换时,Path按照名称进行分割,会出现和File对应的路径不一致的情况
而且分割后的Path会在workspace下的当前项目路径文件夹来存放相对路径,而不是项目所在的根路径来创建相对路径