0

ファイルリポジトリをシミュレートするプロジェクトに取り組んでいるため、多くのファイル操作を使用しています。私は Windows8 マシンで開発していますが、他のプラットフォームにも移植できるはずです。プロジェクトは Java 6 で作成する必要があります。次のコードを検討してください。

public void add(String description, boolean move, String repPath, String filePath) throws Exception {

    ...

    File fileToAdd = new File(filePath);
    if(!fileToAdd.exists()) throw new FileNotFoundException(filePath + " does not exist.");

    ...

    addDataset(description, move, repPath, fileToAdd, parentID);
    ...
}

パラメーターfilePathは、という名前のファイルへの相対パスですmove.txt(この非常に標準的なテキスト ファイル my-self をファイル システム上に直接作成しました)。

まず第一に、fileToAdd.exists()チェックは失敗します (このコードの一部が過去数週間問題にならなかったという事実は言うまでもありません)。しかし、ファイルがこの場所に存在することは 100% 確信しています。正しいパスのように見える絶対パスを印刷したので、チェックが失敗する理由がわかりません...また、fileToAdd.canRead()失敗します(これは、私がレビューした同様の投稿で時々機能していたため、テストしました) . また、fileToAdd.getAbsoluteFile().exists()失敗します。

残りのコードをテストするために、この行を一時的に削除したところ、別の問題が見つかりました。

private void addDataset(String description, boolean move, String repPath, File datasetToAdd, long parentID) {

if(datasetToAdd.isFile()){

        addFile(description, move, repPath, datasetToAdd, parentID);

    } else {

        ...
    }
}

この 2 番目のスニペットでは、datasetToAdd-File オブジェクトは上記のものと同じfileToAddであるため、実際にはファイル (つまりmove.txt) である必要があります。しかし、datasetToAdd.isFile()チェックは失敗します! ファイルオブジェクトがディレクトリ(これは問題ではないと確信しています)または「通常の」ファイルを表していない場合、これが発生することをjavadocで読みました...異常なファイルは正常ですが、単純なテキスト ファイルが正常でない場合、何が正常でしょうか?

4

1 に答える 1

4

「Java はファイルを見つけられません...そこにあることはわかっています!」のような質問があるたびに、そこにはありません。理由は次のとおりです。

JVM の現在のディレクトリは、あなたが思っているものではありません。

デバッグする最速の方法は次のとおりです。

System.out.println(file.getAbsolutePath());

そして、Java がファイルを「見つけられない」理由がすぐにわかります。

于 2013-10-16T22:21:09.837 に答える