gpt4 book ai didi

java - 如何将 txt 文件从互联网加载到我的 jsf 应用程序中?

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:22 26 4
gpt4 key购买 nike

又是我)我还有一个问题。我想从网络加载文件(例如 - txt)。我尝试在我的托管 bean 中使用下一个代码:

 public void run() 
{
try
{
URL url = new URL(this.filename);
URLConnection connection = url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
if (bufferedReader == null)
{
return;
}

String str = bufferedReader.readLine();
while (bufferedReader.readLine() != null)
{
System.out.println("---- " + bufferedReader.readLine());
}
}
catch(MalformedURLException mue)
{
System.out.println("MalformedURLException in run() method");
mue.printStackTrace();
}
catch(IOException ioe)
{
System.out.println("IOException in run() method");
ioe.printStackTrace();
}
finally
{
try
{
bufferedReader.close();
}
catch(IOException ioe)
{
System.out.println("UOException wile closing BufferedReader");
ioe.printStackTrace();
}
}
}


public String doFileUpdate()
{
String str = FacesContext.getCurrentInstance().getExternalContext().getRequestServletPath();
System.out.println("111111111111111111111 str = " + str);
str = "http://narod.ru/disk/20957166000/test.txt.html";//"http://localhost:8080/sfront/files/test.html";
System.out.println("222222222222222222222 str = " + str);
FileUpdater fileUpdater = new FileUpdater(str);
fileUpdater.run();

return null;
}

但是 BufferedReader 返回当前页面的 html 代码,我试图在其中调用托管 bean 的方法。这是非常奇怪的事情 - 我用谷歌搜索过,没有人遇到过这个问题。

也许我做错了什么,也许我们有一种最简单的方法将文件加载到网络(jsf)应用程序中,而不是使用网络API。有什么想法吗?

非常感谢您的帮助!

更新:

也许一些 jsf 代码会有用:

     <ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fc="http://www.fusioncharts.com"
xmlns:t="http://myfaces.apache.org/tomahawk"
template="template.xhtml">
<ui:define name="title">Add company page</ui:define>
<ui:define name="content">
<h:form id="addCompanyForm">
<h:outputText value="Add a new company"/><br/><br/><br/>
<div style="width: 400px;">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="1">
Company name:
</td>
<td>
<h:inputText id="companyName" value="#{companyBean.companyName}" style="width: 100%;" required="true" />
</td>
</tr>
<tr>
<td valign="top" nowrap="nowrap">
Company description:&#160;
</td>
<td>
<h:inputTextarea value="#{companyBean.companyDescription}" style="width: 100%;"/>
</td>
</tr>
</table><br/>
<center>
<h:commandButton value="Save company" action="#{companyBean.doInsertCompany}" style="width: 40%;"/>&#160;&#160;
<a4j:commandButton ajaxSingle="true" value="Clear" actionListener="#{companyBean.doClear}" style="width: 40%;" reRender="addCompanyForm"/>
</center>
<br/><br/><br/>

<h:commandLink value="Return to companies page" action="companies" immediate="true" />

</div>
</h:form>

<h:form>
<br/>
<h:commandButton value="File Update" action="#{companyBean.doFileUpdate}" style="width: 10%;"/>&#160;&#160;
</h:form>
</ui:define>
</ui:composition>

更新 2:我从网络(不是本地主机)获取另一个文件 - 一切正常!抱歉,我对此感到疯狂)))

正如 BalusC 所说,我的应用程序只是没有通过 URL 找到文件:http://localhost:8080/sfront/files/test.txt

我不知道为什么我不能使用本地文件。

有什么想法吗?

最佳答案

如果您确实想将其包含在 JSF 页面中,那么我建议您使用 JSTL c:import为此。

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<c:import url="http://narod.ru/disk/20957166000/test.txt.html" />

容易多了。然而,这仅当您在 JSP 上使用 JSF 时才有效。这不适用于 Facelets 上的 JSF,并且(不幸的是)它也不提供类似的设施。

至于您的实际问题:我不知道,因为所描述的问题是在迄今为止发布的代码信息范围之外引起的,或者您没有运行您期望它运行的代码(重新启动网络服务器以确保编译对 Java 代码的最新更改)。至少 this.filename 返回了不正确的值,而且我发现您已经对自己网页的 URL 进行了注释。也许您更改了此设置,但热部署失败或测试前服务器未重新启动。

此外,我发现您只从 BufferedReader 打印每隔一行,并忽略每个第一个交替行。

while (bufferedReader.readLine() != null) // You're ignoring first line.
{
System.out.println("---- " + bufferedReader.readLine()); // You're only printing next line.

这行不通。假设您希望文件位于单个大String中,那么您应该遵循以下习惯用法来正确使用BufferedReader#readLine():

BufferedReader reader = null;
StringBuider builder = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(someInputStream, "UTF-8"));
for (String line = null; (line = reader.readLine()) != null;) {
builder.append(line).append("\n"); // Append newline as well since readLine() eats them.
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
String content = builder.toString();

关于java - 如何将 txt 文件从互联网加载到我的 jsf 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2873933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com