6

プログラムで読み取る必要があるテキスト構成ファイルがあります。私の現在のコードは次のとおりです。

protected File getConfigFile() {
    URL url = getClass().getResource("wof.txt");
    return new File(url.getFile().replaceAll("%20", " "));
}

これは、Eclipseでローカルに実行すると機能しますが、パス名のスペースを処理するためにそのハックを行う必要がありました. 構成ファイルは、上記の方法と同じパッケージにあります。ただし、アプリケーションを jar としてエクスポートすると、問題が発生します。jar は、マップされた共有ネットワーク ドライブ Z: に存在します。コマンドラインからアプリケーションを実行すると、次のエラーが発生します。

java.io.FileNotFoundException: ファイル:\Z:\apps\jar\apps.jar!\vp\fsm\configs\wof.txt

どうすればこれを機能させることができますか? 現在のクラスと同じディレクトリにあるファイルを読み取るように Java に指示したいだけです。

ありがとう、ヨナ

4

1 に答える 1

14

ファイルが jar 内にある場合、Fileクラスを使用してそれを表すことはできません。これはjar:URI であるためです。代わりに、URL クラス自体が既にopenStream()コンテンツを読み取る可能性を提供しています。

getResourceAsStream()または、代わりに を使用してこれをショートカットできますgetResource()

BufferedReader (メソッドがあるので使いやすい) を取得するにはreadLine()、通常のストリーム ラッピングを使用します。

InputStream configStream = getClass().getResourceAsStream("wof.txt");
BufferedReader configReader = new BufferedReader(new InputStreamReader(configStream, "UTF-8"));

「UTF-8」の代わりに、ファイルで実際に使用されているエンコーディング (つまり、エディタで使用したエンコーディング) を使用します。


別のポイント: URI しかない場合でもfile:、URL を自分でファイル変換するのではなく、代わりに を使用してnew File(url.toURI())ください。これは、他の問題のあるキャラクターにも有効です。

于 2011-02-20T00:33:23.017 に答える