public class InputStreamDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f = new File("e:"+File.separator+"text.txt");
if(!f.exists()){
f.createNewFile();
}
Reader reader = null;
reader = new InputStreamReader(new FileInputStream(f));
char c[] = new char[1024];
int len = reader.read(c);
reader.close();
System.out.println(new String(c,0,len));
}
}
作者: doitforyou 时间: 2013-11-26 12:02
你的这个是属于最后一步出的问题,如果文件中不存在内容,则返回-1,len=-1;
而在new String(c,0,len)中,如果len=-1的话,则角标发生逻辑错误。改为以下代码就好,
int len = 0;
String str = null;
while((len=reader.read(c))!=-1){
str = new String(c,0,len);
}
reader.close();
System.out.println(str);作者: 帅气的冬瓜 时间: 2013-11-26 12:10
不知道你具体想问什么,只是看着你的代码有问题,不完善。我是这样写的:
public class InputStreamDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f = new File("e:"+File.separator+"text.txt");
InputStreamReade reader = null;
if(!f.exists()){
f.createNewFile();
}
int len=0;
reader = new InputStreamReader(new FileInputStream(f));
char c[] = new char[1024];
while(len=reader.read(c)!=-1){
System.out.println(new String(c,0,len)); }
reader.close();
}
}作者: 樊志伟 时间: 2013-11-26 13:38
楼主的代码没有错。
从楼主的代码可以看出,是要从E:\test.txt文件中读取内容然后打印到控制台窗口。
这个程序有两种情况:
1,如果E:\test.txt这个文件中有内容,则这个程序运行没有问题。
2,如果E:\test.txt这个文件中没有内容。则
reader = new InputStreamReader(new FileInputStream(f));
char c[] = new char[1024];
int len = reader.read(c);
这三句话执行完,最后reader.read(c);返回的len的值是-1,
然后System.out.println(new String(c,0,len));时,
相当于System.out.println(new String(c,0,-1));,即从c数组的0脚标读到-1脚标,然后将读到的数据转换成字符串,
再打印到控制台。显然没有-1脚标,然后就会出现StringIndexOutOfBoundsException这个异常提示。
楼主是属于第二种情况。楼主得让E:\test.txt这个文件中有内容才行。