当文件夹不为空时,file.exists 返回 false

Posted

技术标签:

【中文标题】当文件夹不为空时,file.exists 返回 false【英文标题】:file.exists return false when folder is not empty 【发布时间】:2015-09-21 05:25:31 【问题描述】:

我正在尝试访问远程共享位置中的文件。

////hostname//data//upload//123//test.txt
File sourceFile=new File("////hostname//data//upload//123//test.txt");
sysout("sourceFile.exists()"+sourceFile.exists())//returning false

如果目录为空,file.exists() 将返回 true。 我正在使用 Java 1.6

我不明白这是什么奇怪的行为。

【问题讨论】:

你确定你需要写 // 而不是 \\ 吗? 【参考方案1】:

首先回到欧文的建议,这不是正确的尝试。字符\ 在Java 中用作转义序列,通常用于打印保留字符。比如会

String s = "The weather is really "nice" today";

导致错误,因为" 已为字符串保留。正确的版本是

String s = "The weather is really \"nice\" today";

回到问题,你必须知道,当你创建一个文件并测试它是否存在时Java会验证文件的抽象路径名。也就是说,如果您的抽象路径是一个目录并且它存在,true 将被返回。

编辑: 如果您打算检查抽象路径名是否为目录,请尝试以下操作:

// Check if a file is a directory
if(file.isDirectory()) 



// Check if a file contains something
if(file.list().length > 0) 


【讨论】:

问题已修复,因为应用程序 Windows 服务未在正确的用户上运行。因此,由于缺乏权限,它抛出了这个异常。感谢大家的帮助。【参考方案2】:

检查这个例子,它检查目录,否则创建一个新目录,然后创建你的新文件。

File f = new File("D:/image_send");
    File file = new File("D:/image_send/" + date + ".txt");
    try 
        if(!f.isDirectory())
        f.mkdirs();
        
        file.createNewFile();
     catch (IOException e) 
        e.printStackTrace();
    
    System.out.println("File created Success");

【讨论】:

【参考方案3】:
public static boolean fileTransfer(String src, String des) throws Exception 
    if (des == null || des.equals("") || src == null || src.equals("")) 
        return false;
    
    File fileExisting = new File(src);
     File fileNew = new File(des+ fileExisting.getName());
    if (fileExisting.exists() && !fileExisting.isDirectory()) 
        if (fileExisting.renameTo(fileNew)) 
            System.out.println("File is moved successful!");
         else 
            System.out.println("File is failed to move!");
        

    
    return fileNew.exists();

这是根据您的评论进行文件传输的代码,如果您得到布尔值 false,则使用 src 作为源路径,使用 des 作为目标路径,这意味着给定的路径是错误的。

【讨论】:

以上是关于当文件夹不为空时,file.exists 返回 false的主要内容,如果未能解决你的问题,请参考以下文章

仅当查询不为空时,才从查询写入 BigQuery 中的表

仅当搜索框不为空时才显示项目匹配内容

scala - 为啥map.size在地图不为空时返回0

当字段不为空时,需要Codeigniter验证显示事件

SwiftUI:仅当输入不为空时才启用保存按钮

MSSQL - 仅当所有值都不为空时才插入值