专栏首页10km的专栏java nio: Files.isWritable判断文件夹可写(创建子文件夹或文件)

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 条评论
登录 后参与评论

相关文章

  • java nio: walkFileTree实现文件夹复制移动删除

    从java 1.7开始,java提供了java.noi.file.Files类用于更方便的实现文件/文件夹操作。 在Files中提供了丰富的静态方法用于文件...

    用户1148648
  • 基于OpenCL的图像积分图算法改进

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • opencl:C++ 利用cl::make_kernel简化kernel执行代码

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • IOS开发之微信山寨版

      为了犒劳自己的学习内容,就山寨个微信的视图控制吧。拿着微信,仔细的看了一下,主要用到了TabBarController以及配置TabBarItem, Nav...

    lizelu
  • Python flask框架端口失效解决方案

    大家可能有这样的体验,好比在程序里面我明明写了app.run(port=8001),结果程序还是在5000端口输出,我们右键点击py程序,直接运行。

    砸漏
  • 沃尔玛在管理智能应用方面提出专利申请,全球公开专利申请数超过5000件

    经济全球化的当下,大型零售商竞争激烈,沃尔玛正在积极备战。该公司自去年年底开始大幅降低部分商品价格,并与日本电子商务公司Rakuten达成协议,成为Kobo...

    望名天
  • Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

    从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本文中,凯哥就用AQS来代替这个类)。我们先来了解这个类。对这个类了解之...

    凯哥Java
  • 你看到了菜鸟LOGO更新,我看到了马云再造物流业的雄心

    5月22日,菜鸟网络在2017全球智慧物流峰会上发布了全新品牌标识——最近一年阿里经济体下业务品牌升级的不少,比如阿里云、飞猪等等,新logo都越来越酷。菜鸟的...

    罗超频道
  • web是如何实现跨域的

    跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com 页面去请求 www.google.com 的资源。跨域的严格一点的定义是:只要...

    武军超
  • AIM2020 Real World SR(真实场景超分)

    作者:薰风初入弦 知乎:https://zhuanlan.zhihu.com/p/295646725

    AIWalker

扫码关注云+社区

领取腾讯云代金券