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);