1

ここで同様の質問を見回しましたが、私が試みた回答のどれも有用であることが証明されていません. 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)
}
4

1 に答える 1

5

ディレクトリはウェブサイトのリンクですが、それが大きな違いを生む場合は?

はい、絶対にそうです。HTTP ではなく、ファイル システムFileを対象としています。

基本的に、File*Web リソースを操作する場合は、クラスを使用しないでください。さまざまなアプリケーション (Windows Explorer など) が 2 つの違いを隠そうとするからといって、常にコードでそれを行うことができるわけではありません。

たとえば、ディレクトリの「リスト ファイル」に相当する一般的な HTTPがあるとは思えません。特定のリソースを要求すると、ディレクトリのリストが返される場合がありますが、ディレクトリのデフォルト ページが返される場合もあります。

于 2013-08-14T08:30:19.140 に答える