2016-10-25 6 views
2

私はこのコードどのように私はliferayのテキストファイルを読むことができますか?

ReadFile readFile = new ReadFile(); 
    String text = readFile.readFile("\resources\testing.txt"); 
    renderRequest.setAttribute("text", text); 

とコントローラクラスからファイルを読み込むしようとした私は

<% 
    String content = (String)request.getAttribute("text"); 
    %> 

としてview.jspからそれをフェッチしているしかし、私は、ファイルが見つからない例外を取得しています。ファイルの内容を取得する方法は何ですか。

+0

WARファイル? – brandizzi

+0

あなたはアンドロイドプロでそれをしたいですか? –

答えて

-1

FileNotFoundExceptionが発生しているため、適切なファイルルートを指していますか?絶対パスで試しましたか?あなたは何を使用していますか?多分ファイル区切り文字( "\")があなたの問題の原因です。

HIH。

よろしくお願いいたします。

5

Java文字列では、\はエスケープシーケンスを開始し、 "\ r"と "\ t"はエスケープ文字です。たとえば、 "\ t"はタブ文字の文字列です。あなたは文字通りの文字列で\tが必要な場合は、バックスラッシュに

doSomething("\\resources\\testing.txt"); 

をエスケープするか、単に手間を解消する必要があります:あなたは、ディレクトリの区切り

doSomething("/resources/testing.txt"); 

注意としてスラッシュを使用するときにJavaがうまく動作し現在のパスが存在するドライブのルートディレクトリにあるファイルを参照している場合は、ReadFileの実装が何らかの方法でパスを操作しない限り、C:\ resources \ testing.txtまたはD:\ resources \ testing.txtになります。私はあなたの判断に任せます)。 Liferayとは独立して、コマンドラインアプリケーションの中でテストすることができます。あなたのJSPが表示される前に例外がスローされます(関連性のフラグを付けるようにタグを変更しました)

これはLiferayとは完全に独立した純粋なJavaです。

0

問題は絶対パスである必要があるリソースファイル(testing.txt)の相対パスです。

MVCポートレット:requestはどちらかrenderRequest/actionRequestオブジェクトである

PortletContext portletContext = request.getPortletSession().getPortletContext(); 

そして、あなたは次のように、requestから得ることができ、最初にあなたが必要となり、portletContextを絶対パスを作成します。 JSFでいる間、あなたは以下のように、externalContextからrequestを取得することができます。

JSFポートレットを:あなたは\を使用する場合

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
PortletRequest request = (PortletRequest) externalContext.getRequest(); 
PortletContext portletContext = request.getPortletSession().getPortletContext(); 

また、オラフコックにより示唆されるように、あなたは脱出するために必要となりますそれ以外の場合は/を使用します。私はFile.separatorを使用することを好む、それはOSごとにスラッシュを返すので(私は思う!)。今

String relativeFilePath = File.separator + "resources" + File.separator + "testing.txt"; 

として、あなたは、あなたのコードの残りの部分が行く、そして

String absoluteFilePath = portletContext.getRealPath(relativeFilePath); 

、としてportletContextを使用して、絶対パスを取得し、することができます: `内testing.txt`です

ReadFile readFile = new ReadFile(); 
String text = readFile.readFile(absoluteFilePath); 
renderRequest.setAttribute("text", text); 
関連する問題