繁体   English   中英

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

[英]How Can I read text file in liferay?

我试图用此代码从控制器类中读取文件

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

我已经从view.jsp中获取了它

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

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

在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:

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

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

JSF Portlet:

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

另外,按照Olaf Kock的建议,如果使用\\ ,则需要对其进行转义,否则请使用/ 我更喜欢使用File.separator ,因为它根据操作系统返回斜线(我认为!)。

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

现在,您可以使用portletContext作为获取绝对路径,

String absoluteFilePath = portletContext.getRealPath(relativeFilePath);

然后,其余代码如下:

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

由于您收到FileNotFoundException,因此确定要指向正确的文件路径吗? 您是否尝试过绝对路径? 您正在使用什么? 因为也许文件分隔符(“ \\”)是造成问题的原因。

HIH。

问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM