黑马程序员技术交流社区
标题:
IO中的小问题。<已解决>
[打印本页]
作者:
王德升
时间:
2012-6-11 11:10
标题:
IO中的小问题。<已解决>
本帖最后由 王德升 于 2012-6-20 09:07 编辑
import java.io.*;
class FileReaderTest
{
public static void main(String[] args)throws IOException
{
FileReader fr = new FileReader("FileWriterDemo.java");
char[] cha = new char[1024];// 1.
int num = 0;
while((num=fr.read(cha))!=-1)
{
System.out.println(new String(cha,0,num));
}
fr.close();
}
}
//1.这里听老毕说的一个字母是2个字节,什么1K什么的,这里的1024是什么意思,
希望具体点,谢谢。
//第二段代码。
/*
import java.io.*;
class CopyText
{
public static void main(String[] args)
{
FileReader fr = null;
FileWriter fw = null;
try
{
BufferedReader br = new BufferedReader(new FileReader("BufferedReaderDemo.java"));
BufferedWriter bw = new BufferedWriter(new FileWriter("copyBF.java"));
String line = null;
while((line=br.readLine())!=null)
bw.write(line);
bw.newLine();
bw.flush();
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fr!=null)
fr.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
try
{
if(fw!=null)
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
*/
/*
通过缓冲区复制一个.java文件。
*/
import java.io.*;
class CopyTextByBuf
{
public static void main(String[] args)
{
BufferedReader bufr = null;
BufferedWriter bufw = null;
try
{
bufr = new BufferedReader(new FileReader("FileReaderDemo.java"));
bufw = new BufferedWriter(new FileWriter("copyBF.txt"));
String line = null;
while((line=bufr.readLine())!=null)
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch (IOException e)
{
throw new RuntimeException("读写失败");
}
finally
{
try
{
if(bufr!=null)//1.
bufr.close();
}
catch (IOException e)
{
throw new RuntimeException("读关闭失败");
}
try
{
if(bufw!=null)//2.
bufw.close();
}
catch (IOException e)
{
throw new RuntimeException("写关闭失败");
}
}
}
}
//无论是老师写的还是我写的打印出来的为什么都没有换行呢,?
//1.和2.处为什么加个if(bufw!=null)判断后才关闭流呢?
//为什么下面的代码不需要判断呢?
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("demo.txt");
fw.write("ccc");
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
fw.close();//这里怎么没有判断呢?
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
作者:
何拴绪
时间:
2012-6-11 11:37
char 类型在内存中分配两个字节,char[] ch = new char[1024] 就是在内存中分配1024*2 个字节,就是2KB。
作者:
杨康
时间:
2012-6-11 11:57
我来回答一下,如果哪里说的不对,请指教。
1,一个英文字符在内存中是占2个字节的;1k=1024个字节,所以老师用[1024]来用缓冲区为了是方便控制复制文件的大小。
2,为什么加个if(bufw!=null)判断后才关闭流呢?这是为了防止try里面给bufw赋值时发生异常赋值不成功后bufw的值就为null了,因为finally语句里面的代码一定会执行所以当try里面的赋值发生异常时赋值不成功,bufw值为null时那么bufw.close()方法再执行就没有意义了,所以需要判断。
3,你说的那个FileWriter里面其实也是需要判断的。可能只是老师当时讲的时候还没有讲到这点,所以当时没有加上判断吧。
作者:
付信榕
时间:
2012-6-11 12:12
//1.这里听老毕说的一个字母是2个字节,什么1K什么的,这里的1024是什么意思,
希望具体点,谢谢。
1,一个字母在ASCII里是一个字节的,字符char才是两个字节,
2,1kB = 1024 B 这是计算机的存储容量的单位转换。计算机常用B(字节)作为最小单位
常用有: 8 b(位) =1 B(字节) 1kB = 1024 B 1MB=1024KB 1GB=1024MB
3,1024意思就是定义一个大小为1KB的字符数组
//无论是老师写的还是我写的打印出来的为什么都没有换行呢,?
//1.和2.处为什么加个if(bufw!=null)判断后才关闭流呢?
//为什么下面的代码不需要判断呢?
1,我测试了你的代码,我复制到的copyBF.txt是有换行的。不是代码的问题,是自己操作方面的问题吧
2,加不加if(bufw!=null)对两个代码的功能都没有影响。加了if(bufw!=null)就可以在bufw关联的文件不存在时,不会执行关流(执行的话会抛异常),所以就可以减少一次抛异常。
作者:
孙峰
时间:
2012-6-11 12:13
第一个问题::首先要知道:一个字符占两个字节。 这里char[] cha = new char[1024]; 定义的字符数组,数组长度为1024,那么也就是1024x2个字节。 再应该知道:1k就是1024字节。 那么存放该数组的文件就是2K了。
第二个问题:为啥要判断 不为null,因为如果为null的时候,说明前面的 字符流缓冲区的操作发生异常,没有正确的建立或者读取,这时候再进行 缓冲区的操作是没有意义的。
第三个问题:应该都是要判断下的
作者:
郑传庆
时间:
2012-6-11 12:36
第一个问题就像楼上解答的那样。
第二个问题:1.和2.处加个if(bufw!=null)判断是指,如果bufw有数据,就是不等于空,就执行if里面的语句。FileWriterDemo2类里面的finally里面不管有没有异常都会执行。就是指:当你向demo.txt里面写完数据后就关闭。至于为什么不判断,那是因为在第一个try语句里面FileWriter fw = new FileWriter("demo.txt");不管这个文件是不是存在都会重新创建并复写。也就是说这个fw就一定不为空。你也可以在finally里面把fw 设置为空,在来打印判断一下。当然最后自己还是得总结一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2