java IO 的怪问题(给150分)(100分)

  • 主题发起人 主题发起人 foxtailhuliwei
  • 开始时间 开始时间
F

foxtailhuliwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我要处理一个文件,以前的文件大概有2M多,现在的文件1M多,不过
现在的文件行数比以前的多很多。我用如下代码调用
FileReader fr = new FileReader("/data/abc.txt");
BufferedReader br = new BufferedReader(fr);
如果只取abc.txt文件的一部分作为实际的文件,就一切正常,
但是用真正的abc.txt文件,一执行到BufferedReader br = new BufferedReader(fr);
就会抛IOException的异常!

 
你可以把文件缩小一些,如果这样没出错的话,那可能是溢出吧!
 
能报告你的异常吗?以及jdk的版本。
如果这样(如下:),即使缓冲区很小。(默认值8192)而且new bufferReader()不应该
抛出IOException,因为它没有这个异常。
public class TestFileReader {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("src/TestFileReader.java");
BufferedReader br = new BufferedReader(fr, 4);
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
 
你可以做一个译常的检测,有可能是文件可大了吧, 溢出了。 !
 
把你的代码贴出来看看
BufferedReader 应该不会有问题的
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.
-------------------
1M的文件应该没问题的
问题可能在你读的时候出错的
public String readLine()
throws IOException
--------------------------------
你可以用
public int read(char[] cbuf,
int off,
int len)
throws IOException
来试一下
 
public void moveToLastSendBill(String lastMobile, int isLog)
throws FileNotFoundException, IOException {
FileReader fr = new FileReader(billFileName);
BufferedReader br = new BufferedReader(fr);
str = br.readLine();//一到这句就会抛出IOException,但是把取同样文件的前50行,就OK。
while (str != null &&
!str.equals("") &&
str.indexOf("FILE_END") == -1) {
str = br.readLine();
}
br.close();
fr.close();
}
然后继续跟踪,发现异常如下:可能是某些字符转换的原因,但是文件里应该没有什么特殊
字符。
sun.io.MalformedInputException
at sun.io.ByteToCharEUC.convert(ByteToCharEUC.java(Compiled Code))
at java.io.InputStreamReader.convertInto(InputStreamReader.java(Compiled Code))
at java.io.InputStreamReader.fill(InputStreamReader.java(Compiled Code))
at java.io.InputStreamReader.read(InputStreamReader.java:242)
at java.io.BufferedReader.fill(BufferedReader.java(Compiled Code))
at java.io.BufferedReader.readLine(BufferedReader.java(Compiled Code))
at java.io.BufferedReader.readLine(BufferedReader.java:331)
at com.gmcc.portal.processfile.DetailBillBO.moveToLastSendBill(DetailBillBO.java:521)
at com.gmcc.portal.processfile.SendBillApp.main(SendBillApp.java:66)
期望各位大侠帮忙。谢谢
 
把你的文件 前100行拿出来看看
 
START13500000166
13500000166,麦洁,广园中路景泰直街68号201房__,510405,200309
1001,-1,6.00
1015,-1,8.50
1,-1,50.00
2001,-1,51.60
2002,-1,3.85
2016,-1,1.70
2017,-1,0.12
2020,-1,6.60
3001,233,0.50
9,202,2.00
9,214,5.00
9,234,5.00
-1,-1,140.87
END
START13500000574
13500000574,周业基,周门二巷4号,510176,200309
1001,-1,6.00
2001,-1,42.00
2002,-1,0.70
2004,-1,4.80
2005,-1,1.54
2011,-1,0.30
2020,-1,2.45
2,-1,36.00
-1,-1,93.79
END
START13500000654
13500000654,刘智明,员村一横路怡景花园D315,510655,200309
1001,-1,6.00
1017,-1,5.00
1,-1,50.00
2001,-1,84.00
2020,-1,1.40
7,-1,20.00
-1,-1,166.40
END
START13500000849
13500000849,胡永刚,广州市荔湾区沙面五街二号广州海关办公室,510130,200309
1001,-1,6.00
2020,-1,6.80
2,-1,36.00
4,-1,20.00
-1,-1,68.80
END
START13500000870
13500000870,许惜青,广州市芳村区鹤翔路40号3106室,510380,200309
1001,-1,6.00
1,-1,50.00
2001,-1,44.00
2016,-1,0.50
2020,-1,7.90
3001,223,0.10
-1,-1,108.50
END
START13500000924
13500000924,陈国华,瘦狗岭华侨补校敬华楼502,510610,200309
1001,-1,6.00
2001,-1,3.20
2005,-1,1.05
2016,-1,0.20
2020,-1,43.80
2022,-1,0.90
2,-1,36.00
3001,131,3.60
3001,214,0.60
3006,4023,27.00
9,202,10.00
-1,-1,132.35
END
START13500001541
13500001541,谢敏嘉,广州市芳村区长堤街65号,510120,200309
1014,-1,6.00
2002,-1,0.21
2005,-1,8.32
2011,-1,0.60
2020,-1,48.70
2,-1,168.00
3003,-1,11.00
4,-1,20.00
7,-1,20.00
9,144,2.00
9,202,15.00
-1,-1,299.83
END
START13500001676
13500001676,陈正伦,广州市石牌岗顶龙口东路155号702房,510635,200309
1001,-1,6.00
1,-1,50.00
2001,-1,72.72
2004,-1,1.80
2005,-1,1.89
2020,-1,0.10
3,-1,20.00
9,194,10.00
-1,-1,162.51
END
START13500001866
13500001866,邓伟强,广州市荔湾区西华路416号金平大厦B座604房,510170,200309
 
:((
真的很奇怪 我试了一下 一切 都好的 嘿嘿
是不是你的jdk有什么问题呀
String str="";
java.io.FileReader fr = new java.io.FileReader("e://1.txt");
java.io.BufferedReader br = new java.io.BufferedReader(fr);
str = br.readLine();
while (str != null &&
!str.equals("") &&
str.indexOf("FILE_END") == -1) {
str = br.readLine();
System.out.println(str);
}
br.close();
fr.close();
你换台电脑 试试 我的jdk1.4 但很奇怪
FileReader
BufferedReader
Since: JDK1.1就有的
 
是很怪!:(((
不过要多谢你们花时间解决这个怪问题。
分我过一会再散,不介意吧!
 
估计你的机器或者jdk有问题,因为我试了几次,两千行,一万行,都没有问题。
正好前几天,在别的机器上碰到过idl2j的代码生成错误的问题,换个机器就好了。
 
对谢大家的帮助!
 
多人接受答案了。
 
后退
顶部