1

Eclipse で Web 動的プロジェクトを開発しています。1 つのファイル、「users.txt」という名前のファイルは、classes フォルダー (WEB-INF/classes/users.txt) の下にあります。

クラス(サーブレットクラスではなく、基本クラス)でこのファイルの相対パスを取得するにはどうすればよいですか? そのパスを使用して、数行のテキストを追加します。

クリスチャンこれは、読み取りに役立つコードです。問題は、相対パスを使用して同じファイルに書き込み (出力) 用のオブジェクトを作成する方法がわからないことです。

public Products(){
    try{
        InputStream in = getClass().getClassLoader().getResourceAsStream("products.txt");    
        BufferedReader br = new BufferedReader(new InputStreamReader(in));

        readProducts(br);
        in.close();
            br.close();


    }catch(Exception e){
        System.out.println("File doesn't exists");
    }
    }

    public void readProducts(BufferedReader in) throws NumberFormatException, IOException{

        String id="";
        String name="";
        double price=0;

        StringTokenizer st;
        String line;

        while((line=in.readLine())!=null){
            st=new StringTokenizer(line,";");
            while(st.hasMoreTokens()){
                id=st.nextToken();
                name=st.nextToken();
                price=Double.parseDouble(st.nextToken());           
            }           
            products.put(id,new Product(id,name,price));
        }
    }
4

1 に答える 1

2

一般的に言えば、Web アプリケーション ディレクトリ内のファイルの変更に依存するべきではありません。

その理由の 1 つは、サーブレット コンテナーが.warファイルを fs に抽出する義務がないためです。理論的には、Web アプリケーションをメモリから実行できます。ええ、Tomcat とほとんどのコンテナーは解凍します.warが、Java EE 仕様には、これを行う必要があるとは書かれていません。

とにかく、これがリスクに見合う価値があると思われる場合は、ServletContext.getRealPathを使用して webapp ディレクトリ内のファイルの場所を取得できます。

これは次のようになります。

  1. myfilewebapp ルートの下にファイルを作成します(ファイルは と同じフォルダーに配置する必要がありWEB-INFます.war)。
  2. サーブレット (またはサーブレット コンテキストにアクセスできる場所) で次のようにします。

    String filePath = getServletContext().getRealPath("myfile");

これが機能するためには、次のようなリクエストでファイルをフェッチできる必要があることに注意してください: http://<host>:<port>/<contextPath>/myfile(詳細については、メソッドのドキュメントを参照してください)

于 2013-08-10T15:18:21.103 に答える