Topic: 请教BufferedReader问题

  Print this page

1.请教BufferedReader问题 Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 08:56

使用BufferedReader的readline方法一行一行的读取文件,原来文件的每一行的长度是定长的(当中有空格),但是读出来的字符串好像忽略了空格,即变成不定长了。
请问,怎样让他不忽略空格呢?

2.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: why
Posted on: 2004-08-31 09:14

I don't think it will 忽略空格
please double check.

3.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 09:24

我试过了。独出来的字符串长度不一。
我把第一行置空,结果长度变为零了。
要读取的文件是一个TXT文本,由于是数据库中倒出来的,所以每行中,每个字段长度统一(长度不足的右边补满空格)。

我的程序:
FileReader fr=new FileReader(path);
BufferedReader br=new BufferedReader(fr);
String record=br.readLine();
while(record!=null)
{
out.println("<br>"+record.length());
}

4.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: why
Posted on: 2004-08-31 10:00

I still don't think so while the API doc doesn't say anything.

BTW, your little program doesn't work:
String record=br.readLine();
while(record!=null)
{
out.println("<br>"+record.length()); // why would you use "<br"?
record = br.readLine(); // it will loop forever without sth like this
}

5.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: floater
Posted on: 2004-08-31 10:04

looks like he is printing out to serlvet's outstream.

6.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 10:09

这是jsp里面的代码。
完整的页面代码:
要读取的文本文件: test.txt

<%@page contentType="text/html;charset=GB2312" import="java.io.*"%>
<html>
<head><title>JSP Page</title></head>
<body>
<br>
<br>
<br>
<form method="GET">
<p align="center"><input type="file" name="filepath" size="40"></p>
<p align="center"><input type="submit" value="导入" name="submit"></p>
</form>

<%
if (request.getParameter("filepath") != null)
{
String path =new String(request.getParameter("filepath").getBytes("ISO8859_1"));
out.println(path);
FileReader fr=new FileReader(path);
BufferedReader br=new BufferedReader(fr);
String record=br.readLine();
while(record!=null)
{
out.println("<br>"+record.length());
record=br.readLine();
}
br.close();
fr.close();
}
%>
</body>
</html>

test.txt (0.41k)

7.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 10:12

文件每行的长度应该都为137。
我用PowerBuilder作的程序没有问题。

8.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 10:19

我翻了一些书,好像没有提及在这方面的内容。
不管怎样,谢谢斑竹。

9.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 10:30

问题找到了!

文本中每行只要出现中文,就会发生上述问题(其实readLine并没有忽略空格,只是长度计算有问题)。
英文则正常。

请问斑竹有办法解决吗?

10.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-08-31 11:07

我再仔细查了一下,BufferedReader读到的中文字符长度算1(而不是2),所以会使原来的长度改变了。

11.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: maxyma
Posted on: 2004-08-31 12:21

renaldo wrote:
我试过了。独出来的字符串长度不一。
我把第一行置空,结果长度变为零了。
要读取的文件是一个TXT文本,由于是数据库中倒出来的,所以每行中,每个字段长度统一(长度不足的右边补满空格)。

我的程序:
FileReader fr=new FileReader(path);
BufferedReader br=new BufferedReader(fr);
String record=br.readLine();
while(record!=null)
{
out.println("<br>"+record.length());
}


在HTML里,连续的多个空格将呈现为一个空格,但在源文件里还是多个空格,你可以查看源文件。

12.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: xiaopa
Posted on: 2004-08-31 16:25

不知道你读取的文件是用的什么编码,GB2312?GBK?UNICODE?UTF-8?
不管是什么,想办法转换成GB编码的字符串,然后getBytes就好了

13.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: renaldo
Posted on: 2004-09-01 14:38

To maxyma:
record.length()和浏览器解析html空格不是一回事。

To xiaopa:
我都加了getBytes,还是没用。
我不清楚使用什么编码的,就是一般windows中的txt文件。

14.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: nsd
Posted on: 2004-09-02 10:24

如果你想让中文的字符占两个char的话,just use .getBytes("iso-8859-1"),指定编码为英文字符集,嘿嘿。因为字符串的长度计算是按照对应的char数组的长度来算的。
你说的长度保持一致是和哪里来比较的,你只要保证两个地方的计算长度方式是一致的就行了。

15.Re:请教BufferedReader问题 [Re: renaldo] Copy to clipboard
Posted by: yung
Posted on: 2004-09-02 11:02

计算长度的话, like this:

int slen = s.getBytes().length;


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923