2

JSP プロジェクトで、ディレクトリからファイルを読み込んでいます。フルパスを指定すると、ファイルを簡単に読み取ることができます

BufferedReader br = new BufferedReader(new FileReader("C:\\ProjectFolderName\\files\\BB.key"));

しかし、フルパスを書きたくない代わりに、以下のようにファイルを含むフォルダー名を付けたいだけです。

BufferedReader br = new BufferedReader(new FileReader("\\files\\BB.key"));

これを行う方法?

String currentDirectory = new File("").getAbsolutePath();
System.out.println(currentDirectory);
BufferedReader br = new BufferedReader(new FileReader(currentDirectory + "\\files\\BB.key"));

上記を試してもファイルから読み取れません

印刷行は次の出力を提供します

情報: C:\Program Files\NetBeans 7.3

4

4 に答える 4

4

使用する

File file = request.getServletContext().getRealPath("/files/BB.key");

これは、Web コンテンツ ディレクトリからファイル システム ファイルへの相対 URL パス (したがって「/」) を変換します。

ポータブル Web アプリケーションの場合、ファイルが Windows Latin-1 であることがわかっている場合は、エンコーディングを明示的に指定します。そうでない場合は、ホストのデフォルトの OS エンコーディングが指定されます。

BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream(file), "Windows-1252"));

ファイルがリソースとして保存されている場合は、 /WEB-INF/classes/ の下にも使用できます

BufferedReader br = new BufferedReader(new InputStreamReader(
        getClass().getResourceAsStream("/files/BB.key"), "Windows-1252"));

その場合、ファイルは /WEB-INF/classes/files/BB.key の下にあります。

于 2013-05-25T00:17:34.530 に答える
3

ファイル システム リソースではなく、クラスパス リソースとしてファイルを読み取ることをお勧めします。これにより、ハードコーディングや環境固有のフォルダーのパラメーター化を回避できます。この投稿に従ってください「現在のプロジェクト」のクラスパスの場所からファイルを読み取る

于 2013-05-24T23:48:34.633 に答える
2

これを追加:

private static String currentDirectory = new File("").getAbsolutePath();

BufferedReader を次のように変更します。

BufferedReader br = new BufferedReader(new FileReader(currentDirectory + "\\files\\BB.key"));

currentDirectory には、プロジェクト ディレクトリのパス (プログラムを実行している場所) が含まれます。

于 2013-05-24T23:52:57.950 に答える
0

相対パス (new FileReader("files/BB.key")) でファイルを参照すると、プログラムの実行時に現在の作業ディレクトリに対して解決されます。

具体的に何を達成しようとしていますか?

プログラムでファイルをパッケージ化し、プログラムでこれにアクセスする場合は、それをクラスパスに配置し、Class.getResource... メソッドの 1 つを使用してリソースとしてロードします。

于 2013-05-24T23:50:02.580 に答える