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

相关文章

来自专栏landv

c语言-error C2440: “static_cast”: 无法从“UINT (__thiscall CHyperLink::* )(CPoint)”转换为“LRESULT (__thiscall

1623
来自专栏iOS技术

iOS RunLoop 深入探究

RunLoop是iOS或OSX开发中很重要的一个组件,它实现了很多底层的功能,本文主要分析RunLoop的概念、结构、运行原理,文中的结论主要是基于苹果官方文档...

3637
来自专栏张善友的专栏

asp.net mvc本地程序集和GAC的程序集冲突解决方法

一个从asp.net mvc 3升级到asp.net mvc 4的项目发生了如下错误: [A]System.Web.WebPages.Razor.Config...

1985
来自专栏张善友的专栏

Silverlight 2 的基础XAML语法学习

要想成为Silverlight 的开发高手,熟练通达XAML语法是必由之路。现在我们来一个空的XAML模板。 Silverlight 1.0 的模板是这样的...

1929
来自专栏跟着阿笨一起玩NET

C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用)

本文转载:http://www.csframework.com/archive/2/arc-2-20110805-1771.htm

5892
来自专栏iOS技术杂谈

iOS多线程——RunLoop与GCD、AutoreleasePool你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里 转载请注明出处 https://cloud.tencent.co...

42211
来自专栏跟着阿笨一起玩NET

ASP.NET WEB API 调试

RouteDebugger 是调试 ASP.NET MVC 路由的一个好的工具,在ASP.NET WEB API中相应的有 WebApiRouteDebugge...

1272
来自专栏逆向技术

PE文件格式详解,第一讲,DOS头文件格式

           PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行...

2045
来自专栏张善友的专栏

每周.NET前沿技术文章摘要(2017-05-24)

汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容。

5910
来自专栏我和未来有约会

silverlight 《Hands-On-Labs》教程系列

Silverlight Fundamentals: Basic concepts of Silverlight 2 development [开发的基础] T...

1897

扫码关注云+社区