黑马程序员技术交流社区
标题:
FileInputStream用available方法出现的问题。
[打印本页]
作者:
葛奎
时间:
2012-10-29 18:43
标题:
FileInputStream用available方法出现的问题。
private static void readFile_3() {
FileInputStream fis = null;
try {
fis = new FileInputStream("d:\\heimaio\\FileStream.txt");
//int len = fis.available();
byte[] buf=new byte[fis.available()];
fis.read(buf);
//System.out.println(new String(buf,0,len));
System.out.println(new String(buf,0,fis.available()));
用打上注释的方法读,就能读取出数据。
为什么直接调用fis.available()就读不出来了呢?什么数据都没有,显示是空的 帮忙解决下
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
作者:
王威
时间:
2012-10-29 19:12
本帖最后由 王威 于 2012-10-29 19:17 编辑
错误很明显
private static void readFile_3() {
FileInputStream fis = null;
try {
fis = new FileInputStream("d:\\heimaio\\FileStream.txt");
//int len = fis.available();
byte[] buf=new byte[fis.available()];//
这一句肯定可以执行,也可以获取fis.available() 的值
fis.read(buf);
//System.out.println(new String(buf,0,len));
System.out.println(new String(buf,0,fis.available()));
//当你执行到这一句的时候流已经读到末尾了,所以
fis.available()
读出来的值是0,不信你可以在这个地方打印
fis.available()
用打上注释的方法读,就能读取出数据。
为什么直接调用fis.available()就读不出来了呢?什么数据都没有,显示是空的 帮忙解决下
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
再让你看看jdk的API中available() 方法的介绍:
QQ截图20121029191443.jpg
(16.5 KB, 下载次数: 118)
下载附件
2012-10-29 19:16 上传
这里是读取剩余字节数
作者:
曾浩
时间:
2012-10-29 19:13
因为数据读取结束后读取数据的指针也就指向到了最后
在调用available方法的返回值就是0了
也就是你的输出语句是输出 0到0 之间的数据 也就是没有输出
把输出语句改下吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2