ここで同様の質問を見回しましたが、私が試みた回答のどれも有用であることが証明されていません. 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 + "\\");
これが生成しているパスは有効であり、間違いなくディレクトリです。ディレクトリはウェブサイトのリンクですが、それが大きな違いを生む場合は?
ファイルを使用するスニペット
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
、メッセージとともに をスローしています:
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません。
if statement
を呼び出そうとすると、でエラーが発生しますgetCanonicalFile()
。
getCanonicalFile()
メソッド呼び出しを削除すると、呼び出しfalse
時に解決されますisDirectory
。
チェックをすべて外すと にlistFiles()
解決されnull
、これにはさらに何かがあると思います。
および Web リンクに関する一般的な問題はisDirectory
ありますか、またはファイル オブジェクトに強制的にパスをディレクトリとして解釈させる方法はありますか?
編集
以下は、目的の機能を実行する 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
}
そして、この関数は、上記のディレクトリから新しい 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)
}