Java 如何在liferay中读取文本文件?

Java 如何在liferay中读取文本文件?,java,Java,我试图用这段代码从控制器类读取一个文件 ReadFile readFile = new ReadFile(); String text = readFile.readFile("\resources\testing.txt"); renderRequest.setAttribute("text", text); 我已经从view.jsp获取了它 <% String content = (String)request.getAttribute("te

我试图用这段代码从控制器类读取一个文件

    ReadFile readFile = new ReadFile();
    String text = readFile.readFile("\resources\testing.txt");
    renderRequest.setAttribute("text", text);
我已经从view.jsp获取了它

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


但我得到的文件找不到异常。获取文件内容的方法是什么。

由于您得到的是FileNotFoundException,您确定您指向的是正确的文件路径吗?你试过绝对路径吗?你在用什么?因为可能是文件分隔符(\)导致了您的问题


注意。

在Java字符串中,
\
启动一个转义序列,“\r”和“\t”是转义字符。例如“\t”是带有制表符的字符串。如果您确实需要字符串中的
\t
,则必须避开反斜杠

doSomething("\\resources\\testing.txt");
或者干脆省去麻烦:当您使用正斜杠作为目录分隔符时,Java运行良好

doSomething("/resources/testing.txt");
请注意,这指的是当前路径所在的任何驱动器的根目录中的文件,它可能是C:\resources\testing.txt或D:\resources\testing.txt-除非您的
ReadFile
实现以某种方式操纵路径(这取决于您的判断)。您可以在命令行应用程序中独立于Liferay进行测试。在显示jsp之前抛出异常(我已更改标记以标记相关性)


这是纯Java,完全独立于Liferay。

问题在于资源文件(
testing.txt
)的相对路径必须是绝对路径。要创建绝对路径,首先需要,
portletContext
,您可以从
request
获取该路径,如下所示:

MVC Portlet:

其中,
request
renderRequest
/
actionRequest
对象。在JSF中,您可以从
externalContext
获取
request
,如下所示:

JSF Portlet:

另外,正如Olaf Kock所建议的那样,如果使用
\
,则需要将其转义,否则使用
/
。我更喜欢使用
File.separator
,因为它会根据操作系统返回斜杠(我想!)

现在,您可以使用
portletContext
as获得绝对路径

String absoluteFilePath = portletContext.getRealPath(relativeFilePath);
然后,剩下的代码如下所示:

ReadFile readFile = new ReadFile();
String text = readFile.readFile(absoluteFilePath);
renderRequest.setAttribute("text", text);

WAR文件中是否包含
testing.txt
?是否希望在android pro中使用它
String relativeFilePath = File.separator + "resources" + File.separator + "testing.txt";
String absoluteFilePath = portletContext.getRealPath(relativeFilePath);
ReadFile readFile = new ReadFile();
String text = readFile.readFile(absoluteFilePath);
renderRequest.setAttribute("text", text);