关于JSP的输入输出流的问题

AHUA1001 2003-05-07 02:44:28
我用JBuilder 7 Enterprise编辑JSP的代码如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.io.*"%>
<html>
<head>
</head>
<body>
</body>

<%
int b;
byte buffer[]=new byte[2500000];
try
{
FileInputStream readfile=new FileInputStream("c:\\bc.txt");
b=readfile.read(buffer,0,2500000) ;
try
{
String str=new String(buffer,0,b,"Default");
String ss=new String(str.getBytes("ISO8859-1"));
System.out.println(ss) ;
out.println(ss);
}
catch(UnsupportedEncodingException e)
{System.out.println("the");}
}
catch(IOException e)
{System.out.println("file read error");}

%>
</html>

现在有两个问题,
第一,我将一个文本文件里的内容读到IE的页面上,如果内容是阿拉伯数字或者英文字母都可以,但是如果读到中文不是显示????就是显示乱码,请问应该如何解决。
第二,如果我想将一个很大的文本文件里的内容(可以有几个M),请问应该如何进行操作。
...全文
275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
WhoAmYou 2003-05-07
  • 打赏
  • 举报
回复
理论上讲大文件和小文件是一样的,
但byte buffer[]=new byte[2500000];实在不欣赏
基本代码 理解就好,要自己调试,我也得有分吧
File f= new File("abc.txt);
long fileLength = f.length();
byte[] b = new byte[1024];
...............
String filesize = Long.toString(fileLength);
response.setHeader("Content-length",filesize);
long totalSize = 0;
while(totalSize<fileLength)
{
totalSize +=1024;
if(totalSize>fileLength)
{
// the last past
byte[] lastPart = new byte[1024-(int)(totalSize-fileLength);
in.read(leftPart);
}
else
{
in.read(b);
}
JetKingLau 2003-05-07
  • 打赏
  • 举报
回复
大文件和小文件是一样处理的,既然是文本文件,同样可以逐行处理,只不过在JSP里要等所有内容读完后才能显示罢了,如果是Servlet,你可以即时看到页面逐行添加。

在我的程序里,读语句本身就是一个循环,读一行,在页面写一行,如果遇到文件结束,stringLine就是一个null值,就退出循环。
while((stringLine = reader.readLine()) != null ) {
out.println("<nobr>" + stringLine + "<br>");
}

如果要在读完整个文件的内容后,再写到页面,可以用向量Vector:
Vector vectorString = new Vector();
String stringLine;
while((stringLine = bufferedReader.readLine()) != null) {
vectorString.addElement(stringLine);
}

访问该向量中第index个元素:
String tmpString = String.valueOf(vectorString.elementAt(index));
hehaheha 2003-05-07
  • 打赏
  • 举报
回复
1。你自己转换成iso8859-1当然不能显示中文了。你的页面应该和你转换的一致,而且要和
平台字符集一致。
2。不明白你为什么要用这么复杂的方法把一个txt读到ie里面。不要忘了ie是个容器,txt文件本来就可以显示的。只要设置一下http的meta 就可以了。
AHUA1001 2003-05-07
  • 打赏
  • 举报
回复
WhoAmYou(四海为家) :能不能说的更具体一些。最好有代码。
JetKingLau(时差) 的50分我一定给,就等第二个问题的答案了。
AHUA1001 2003-05-07
  • 打赏
  • 举报
回复
十分感激两位高人JetKingLau(时差) 的办法好用,但是两个问题只有一个答案,我更关心的还没有答案,给50分。
moumouren(某某人) 的解决方案JBuilder 7 Enterprise编译出现一个错误如下。
exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred between lines: 15 and 36 in the jsp file: /Jsp1.jsp

Generated servlet error:
D:\jsp\blob_and_clob\Tomcat\work\Jsp1$jsp.java:84: Undefined variable or class name: is
while((length = is.read(buffer))>-1){
^


An error occurred between lines: 15 and 36 in the jsp file: /Jsp1.jsp

Generated servlet error:
D:\jsp\blob_and_clob\Tomcat\work\Jsp1$jsp.java:85: Variable b may not have been initialized.
String ss=new String(b,0,length,"gb2312");
^


An error occurred between lines: 15 and 36 in the jsp file: /Jsp1.jsp

Generated servlet error:
D:\jsp\blob_and_clob\Tomcat\work\Jsp1$jsp.java:85: Incompatible type for constructor. Can't convert int to byte[].
String ss=new String(b,0,length,"gb2312");
^
3 errors

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:285)
at org.apache.jasper.servlet.JspServlet.loadJSP(JspServlet.java:552)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.loadIfNecessary(JspServlet.java:177)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:189)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:484)

WhoAmYou 2003-05-07
  • 打赏
  • 举报
回复
第二个问题
分3步
1. 读出文件长度length
2. 设置每次输出的长度为1024字节,
3. 开始循环,直到输出所有的内荣为止
moumouren 2003-05-07
  • 打赏
  • 举报
回复
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.io.*"%>
<html>
<head>
</head>
<body>
</body>

<%
int b;
byte buffer[]=new byte[1024];
try
{
FileInputStream readfile=new FileInputStream("c:\\bc.txt");
try
{
int length = -1;
while((length = is.read(buffer))>-1){
String ss=new String(b,0,length,"gb2312");
System.out.println(ss) ;
out.println(ss);
}
}
catch(UnsupportedEncodingException e)
{System.out.println("the");}
}
catch(IOException e)
{System.out.println("file read error");}

%>
</html>
JetKingLau 2003-05-07
  • 打赏
  • 举报
回复
我的这个jsp文件显示中文没问题

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.io.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test</title>
</head>
<body bgcolor="#f8f8f8" text="#000000">
<%
BufferedReader reader = new BufferedReader(new FileReader("D:/Develope/C++Builder编程.txt"));
String stringLine;
while((stringLine = reader.readLine()) != null ) {
out.println("<nobr>" + stringLine + "<br>");
}
%>
</body>
</html>

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧