代码如下:
package ZiJieLiuZiFuLiu02;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class ZiJieLiuZiFuLiu02 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"fly.txt");
InputStream input=new FileInputStream(f);
byte b[]=new byte[1024];
int len=0;
int temp=0;
while((temp=input.read())!=-1)
{
b[len]=(byte)temp;
len++;
}
input.close();
System.out.println(new String(b,0,len));
}
}
其中byte b[]=new byte[1024];这句定义的是数组的长度,如果超过长度该怎么处理,java不支持数组大小动态变化吧?
b[len]=(byte)temp;这句如果temp超过1024咋整?求解释,谢谢!
public int read(byte[] b)
throws IOException
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b
中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
如果 b 的长度为 0,则不读取任何字节并返回
0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值
-1;否则,至少读取一个字节并将其存储在 b 中。
在这里还要纠正楼上的说“超过长度,它会自动增加长度的!”这是错误的,数组一旦初始化长度就固定了。长度会增长的应该是ArrayList集合
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // ●判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
当然这样文件也不能太大,否则很慢,你可以使用BufferedInputStream这个流可以一次读一个Byte数组