java nio: Files.isWritable判断文件夹可写(创建子文件夹或文件)

java.nio.file.Files.isWritable方法用于测试一个文件是否可写。但是对于文件夹,这个办法并不能用来测试文件夹是否可以创建子文件夹或文件。 比如对于匿名(只读)访问一个网络共享文件夹,isWritable返回是true

Path path3=Paths.get("\\\\SERVER\\share");//匿名用户只有读取权限的共享文件夹
System.out.println(Files.isWritable(path3));//返回true

所以如果想判断一个文件夹是不是真的可写,这个办法是不靠谱的。怎么办呢?看来只有去尝试创建文件和文件夹才能真判断文件夹是否可写了,于是想到了用于创建临时文件夹和临时文件的两个方法Files.createTempDirectory,Files.createTempFile,用这两个方法尝试创建临时文件夹和临时文件,如果成功并且能删除就说明该文件夹可以可写。 代码很简单:

    /**
     * 判断一个文件夹是否可创建文件/文件夹及可删除
     * @param dir
     * @return
     */
    public static boolean isWritableDirectory(Path dir) {
        if (null == dir)
            throw new IllegalArgumentException("the argument 'dir' must not be null");
        if (!Files.isDirectory(dir))
            throw new IllegalArgumentException("the argument 'dir' must be a exist directory");
        try {
            Path tmpDir = Files.createTempDirectory(dir, null);
            Files.delete(tmpDir);
        } catch (IOException e) {
            return false;
        }
        try {
            Path tmpFile = Files.createTempFile(dir, null, null);
            Files.delete(tmpFile);
        } catch (IOException e) {
            return false;
        }
        return true;
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python3

python sys模块

['E:\\python_script\\day5\\test4', 'C:\\Program Files\\Python36\\python36.zip', ...

752
来自专栏WeaponZhi

高效开发 MVVM 和 databinding 你需要使用的工具

阅读本篇大概需要 11 分钟。 相信不少同学已经开始使用 MVVM 作为自己 Android 开发架构了,但实际上,我在使用过程中查阅资料发现,网上有关 MVV...

3599
来自专栏十月梦想

一天带你入门到放弃vue.js(二)

至此在vue中提供了计算属性,computed,在main.js指定computed对象中指定计算

582
来自专栏Coding迪斯尼

使用组件的state机制实现屏幕取词

852
来自专栏python3

python 用户交互

input是个内建函数,具体用法:接收用户输入的内容,输入的字符串,接收到就是字符串;输入的是数字,接收的就是数字

642
来自专栏python学习路

二、路由、模板

一、路由系统 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对...

2888
来自专栏Spring相关

Springboot用官方建议访问Html页面并接传值

我们以前通常习惯用webapp来放置jsp页面,但是到了Springboot中,官方建议用Static文件夹来存放及静态的资源,

924
来自专栏進无尽的文章

关于-#pragma

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一...

991
来自专栏CIT极客

【奇淫巧技】Javascript入门笔记,打造最绚丽网页特效!

3476
来自专栏地方网络工作室的专栏

Python3 初学实践案例(3)argparse 命令行参数库的使用

Python3 初学实践案例(3)argparse 命令行参数库的使用 在前面一篇博文中 http://blog.csdn.net/fungleo/articl...

3379

扫码关注云+社区