资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
JAVA6用多种方式实现从文件按行读数据和写入文件数据作为一个基本知识,对读写文件相信我们在写代码的时候都遇到过,对千我而言我一般是直接BufferReader或者BufferWriter安排上就完事了,但是我们的实验从来不让我失望,他这一次要求我们用三种不同的方式进行读写文件,没错就是三种。在我好不容易完成了他的要求之后我赶紧将这三种方式变成我的博客嘿嘿嘿1. Reader and Writer 作为Reader和Writer,他们和lnputStream和OutputStream的蚊大区别是什么,是一次性操作的字节数目,前者一次操作两个后者一次操作一个。但是在这巠我们的主要观测点是在他们的方法上,作为最常用的读写文件的类,Reader和Writer为我们提供了很方便的方法,再写方面Writer和BufferedWriter都为我们提供了写字符串的方法。直接write()里面放个宁符串就可以了,凡是Reader则没有给我们提供直接按行读取字符串的方法,但是BufferedReader的readline()方法则可以直接读一行字符串,百接调用即可。太简单了这里就不放代码了。2.Scanner Scanner经常被我们用千读取控制台的输入,但是我们只需要将他构造函数中的System. in替换成一个们le文件,他就可以变成一个读取文件的Scanner了,Scanner的按行读取方法是nextLine()我们在使用它的时候可以在前面判断它时候hasNextLine(汃也是十分方便lFile file=new File(fileSource); 2 try 3 in=new Scanner(file); 4 catch (FileNotFoundException e) 5 / TODO Auto-generated catch block 6 e. printStackTrace(); 7 8 9 Override 10 public String read line() 11 if(in.hasNextline() 12 return in.nextline(http:/www.rodlg.com); 13 14 return null; 15 3. InputStream和OutputStream下面就是倒霉的FileOutputStream和1订lelnputSLream了,这俩倒霉孩子虽说在有时候挺好使的,但是要是按行来是真的麻烦啊,由千这两个只能读写byte数组,所以再写的时候我们将字符串调用getBytes()方法转换成byte数组来写l F ileOutputSt ream fos; 2 public OUTStream(File file) 3 try 4 fos=new FileOutputStream(file); 5 catch (FileNotFoundException e) 6 II TODO Auto-generated catch block 7 System.out.println(file not find); 8 e. printStackTrace(); 9 10 11 12Override 13 public void write(String string) 14 I I TODO Auto-generated method stub 15 byte bJ=string.getBytes(); 16 try 17 fos. write(b); 要说到FileinputStream就更麻烦了我们判断他是否换行的唯一依据就是rn,所以我们只能够一个字节一个字节的读取,并把每次读取的字节转换为char类型存在一个足够大的char数组中,当读到r的时候证明这行读宪了(当read()返回l的时候证明文件读宪了)这时候我们将char数组变为String返匣lpublic class INStream implements INstrategy 2/use Stream as IN strategy 3 private byte b=new bytel; 4 private char cs=new char1024; 5 private FilelnputStream fis=null; 6 public INStream(String fileSource) 7 try 8 fis=new FilelnputStream(fileSource); 9 catch (FileNotFoundException e) 10 / TODO Auto-generated catch block 11 System. out. println (11 file not f i nd 11); 12 System.exit(0); 13 14 15Override 16 public String readline(http:/www.482223.com) 17 try 18 int i=0; 19 int j=0; 20 cs=new char1024 ; 21 fis.read(b); 22 while(b0 !=r)判断是否换行23 if(j=-1) 24 return null; 25 26 csi=(char)b0 ; 27 j=fis.read(b);判断是否读完28 i+; 29 30 if(j ! =-1) 31 32 fis.read(b); 33 catch (IOException e) 34 / TODO Auto-generated catch block 35 e. printStackTrace(); 36 37 return new String(cs); 38 3.归leChannel刚才说了这么多我们很容易发现,这写还差一种啊,不着急最后一种就是我以前根本就不知到的旧leChannel方法,臼leChannel翻译过来就是文件通道,按这个翻译看起来应该是能够读写文件的。们leChannel类的使用必须配合一个byteBuffer类使用我们再创建一个FileOutputStream对象之后使用getChannel()方法来创建一条通道,同时我们将要写入的字符串是用getBytes()存在byteBuffer中,翻转byteBuffer使它变为写状态,只要byteBuffe不为空就像F且eChannel中写,最后清空bytebuffer完成写操作lpublic class OUTBuffer implements OUTStrategy 2 FileChannel outChannel; 3 ByteBuffer byteBufferl=ByteBuffer.allocate(1024); 4 public OUTBuffer(File file) s try 6 FileOutputStream fos=new FileOutputStream(file); 7 outChannel=fos.getChannel(); 8 catch (FileNotFoundException e) 9 System.out.println(file not find); 10 / TODO Auto-generated catch block 11 e.printStackTrace(); 12 13 14 15Override 16 public void write(String string) 17 II TODO Auto-generated method stub 18 byteBufferl.put(string.getBytes(); 19 byteBufferl. flip(http: I lwww. 267774. com); 20 while (byteBufferl. has Remaining() 21 try 22 outChannel. write (byteBufferl); 23 catch (IOException e) 24 II TODD Auto-generated catch block 25 e.printStackTrace(); 26 27 28 byteBufferl.clear(); 29
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号