gpt4 book ai didi

java - 奇怪的 isDirectory 行为

转载 作者:行者123 更新时间:2023-11-29 07:55:11 25 4
gpt4 key购买 nike

我在这里查看了类似的问题,但我尝试过的答案都没有被证明是有用的。我正在尝试加载网络上存在的目录。当我导航到我的程序生成的路径时,它绝对是一个目录。但是,当我尝试在表示路径的文件对象上使用 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 + "\\");

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

我使用文件的片段

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

File[] files = directory.listFiles();

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

The filename, directory name, or volume label syntax is incorrect.

当我尝试调用 getCanonicalFile() 时,错误发生在 if 语句 中。

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

如果我一起删除检查,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
}

并且此函数从所述目录创建了一个新的文件对象。

 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)
}

最佳答案

The directory is a website link, if that makes a huge difference?

是的,确实如此。 File 适用于文件系统 - 而非 HTTP。

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

例如,我不相信一个目录的“列表文件”的通用 HTTP 等价物。您请求特定资源 - 可能返回目录列表,但它同样可以提供目录的默认页面。

关于java - 奇怪的 isDirectory 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com