奇怪的是目录行为

chr*_*her 1 java directory file

我在这里看过类似的问题,但我尝试过的答案都没有证明是有用的.我正在尝试加载Web上存在的目录.当我导航到我的程序生成的路径时,它绝对是一个目录.但是,当我尝试isDirectory在表示路径的文件对象上使用它时,它不起作用.

我生成文件的片段

if (sport == null || sport.trim().length() == 0) {
        return null;
    }

    File dayDirectory = new File(aggregatorRootDirectory, new SimpleDateFormat("yyyy-MM-dd").format(date));
    String sportDirectory = sport.replace(",", "");

    return new File(dayDirectory + "\\" + sportDirectory + "\\");
Run Code Online (Sandbox Code Playgroud)

生成的路径是有效的,绝对是一个目录.该目录是一个网站链接,如果这有很大的不同?

我使用该文件的片段

 try {
        if (directory == null || !directory.getCanonicalFile().isDirectory() || 
            fileNamePattern == null || fileNamePattern.trim().length() == 0) {
            return null;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    File[] files = directory.listFiles();
Run Code Online (Sandbox Code Playgroud)

这个尝试抛出一条java.io.IOException消息:

文件名,目录名或卷标语法不正确.

if statement当我试图打电话时,错误发生了getCanonicalFile().

当我删除getCanonicalFile()方法调用时,它会false在我调用时解析为isDirectory.

如果我一起删除支票,listFiles()解决null,这让我觉得还有更多的东西.

是否存在isDirectory与Web链接相关的常见问题,或者是否有办法强制文件对象将路径作为目录进行解释?

编辑

下面是执行所需功能的Scala代码.以下函数从在线目录中获取了文件列表:

private def getFiles(directory: File, fileNamePattern: String): Seq[Elem] = {    

if(directory == null || ! directory.isDirectory
|| fileNamePattern == null || fileNamePattern.trim.length == 0) {
  return Nil
}  

val filesList = directory.listFiles( new FilenameFilter {
       override def accept(dir: File, name: String) = { name.matches(fileNamePattern) 
} } )

val sortedFilesList = filesList.sortBy(_.lastModified)

val feedsList = mutable.ListBuffer[Elem]() 

for(file <- sortedFilesList) {
  try {     
    feedsList += XML.loadFile(file) % new UnprefixedAttribute("original-filePath", file.getCanonicalPath, Null)
  }
  catch {
    case _ => // TODO log
  }
}   

feedsList
}
Run Code Online (Sandbox Code Playgroud)

此函数从所述目录创建了一个新的File对象.

 private def getSportDirectory(sport: String, date: Date = new Date): File = {

if(sport == null || sport.trim.length == 0) {
  return null;
}

val dayDirectory = new File(aggregatorRootDirectory, new SimpleDateFormat("yyyy-MM-dd").format(date))
val sportDirectory = sport.replace(",", "") // resolving sports like "HR,DG" to "HRDG". Not ideal but ...

new File(dayDirectory, sportDirectory)
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

该目录是一个网站链接,如果这有很大的不同?

是的,它绝对是.File适用于文件系统 - 而不是HTTP.

基本上,File*如果您尝试使用Web资源进行操作,则不应使用类.仅仅因为各种应用程序(例如Windows资源管理器)试图隐藏两者之间的差异并不意味着你总是可以在代码中这样做.

举例来说,我不认为有一个普通的HTTP相当于"列表文件"的目录.您请求特定资源 - 并且可能返回目录列表,但它同样可以提供目录的默认页面.