黑马程序员技术交流社区
标题:
IO缓冲区中的一个小方法的疑问
[打印本页]
作者:
马超
时间:
2012-5-2 09:23
标题:
IO缓冲区中的一个小方法的疑问
package IO练习;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
实现需求:拷贝一个文件*/
public class Copy
{
public static void main(String[] args) throws IOException //抛出异常
{
copy(); //调了copy()方法,我们在函数上要抛出异常
}
public static void copy() throws IOException
{
FileReader fr = null;
FileWriter fw = null;
try
{
fr = new FileReader("Arraytest.java");
fw = new FileWriter("ArraytestCopy.txt"); //相当于创建了一个文件ArraytestCopy.txt
char[] ch = new char[1024];
int len = 0;
while((len = fr.read(ch))!=-1) //只要我从读的文件Arraytest.java当中没有读到空
{
fw.write(ch);
//我就把读到的内容写到数组里边当中去,
执行这一句的时候做了打印动作,它是存满1024个字节才打印一便的还是?
}
}
catch(IOException e)
{
throw new RuntimeException("读取错误");
}
finally
{
if(fr != null)
try
{
fr.close();//由于它是FileWriter的子类对象,我们就要对它
//进行try语句判断。
}
catch(IOException e)
{
}
if(fw != null)
try
{
fw.close();
}
catch(IOException e)
{
}
作者:
刘基军
时间:
2012-5-2 10:00
while((len = fr.read(ch))!=-1)
{
fw.write(ch); //1.正确的写法应该是: fw.write(ch, 0, len);你比较一下两个文件的大小就知道两者的区别了
//2.执行一次fr.read(ch),就会向文件写一次.一次最多能读到1024个字符数据,若是第一次不够(源文件本身大小小于1024个字符)或最后一次不够,那就以实际读到的字符数据个数为准,记在len中,所以应该使用:fw.write(ch, 0, len);
}
作者:
蒋映辉
时间:
2012-5-2 10:02
fr.read(ch))把数据存入数组是在这句代码实现的
如果你的代码超过1024字节 就满了以后答应,如果没超过,就有多少打印多少
作者:
岳民喜
时间:
2012-5-2 10:06
while((len = fr.read(ch))!=-1) //只要我从读的文件Arraytest.java当中没有读到空
{
fw.write(ch); //我就把读到的内容写到数组里边当中去,执行这一句的时候做了打印动作,它是存满1024个字节才打印一便的还是? }
只要你定义的new char[1024]字符能够装下读取文件中的内容,那么它是一次性把ch中内容写入指定文件的。
所以在定义的字符数组大小的 时候应该注意数组大小。
作者:
贾联国
时间:
2012-5-2 10:30
while((len = fr.read(ch))!=-1) // fr.read(ch)返回的是存入数组的元素个数,只要有数据,fr.read(ch))!=-1就返回真,并把len个数据存到ch中,如果文件很大,就先存1024个,进行循环语句之后再存剩下的,直到文本读取完毕。
{
fw.write(ch); //如果文本很小,不用存满1024。如果文本很大,超过1024,则每存1024个打印一次。
}
}
作者:
真真姐
时间:
2012-5-2 12:26
char[] ch = new char[1024]; //定义的字符缓冲区,这里可以根据需要定义长度,但是一般情况下,不需要太大,否则会占用系统资源
int len = 0;
while((len = fr.read(ch))!=-1) // 这里的意思是,每次从字符缓冲区中读取1024长度的内容,然后写入制定的位置
{
fw.write(ch);
这里注意两个问题: A、 ch 写的太大写的太大,你又多个地方new的话实际上属于浪费,和占用资源
B、如果最后一次不到1024就没有内容了怎么办,那这时就会返回-1,然后停止读取,系统会自动把最后的这些内容写入,跳出!
相当于 while(frd.read(ch)!=-1||frd.read(ch)!=null)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2