-------
android培训、
java培训、期待与您交流! ----------
为了解决这种不完美,自己在重写一个自己想要的readLine读取方法,和调用者之间相互配合来弥补这种缺陷。
</pre><p></p><p></p><p>在下面的用常规方法拷贝文件示例中,</p><p>存在当原文件最后一行没有换行时,程序会使拷贝文件换行。</p><p></p><p></p><pre name="code" class="java">import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 用缓冲区拷贝一个java文件。
*/
public class BufferedTest {
public static void main(String[] args) {
BufferedWriter bufw = null ;
BufferedReader bufr = null ;
try{ //文件目录可以自己指定
bufw = new BufferedWriter(new FileWriter("G:\\Stu_copy.java"));
bufr = new BufferedReader(new FileReader("G:\\Stu.java"));
String line = null ;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine(); //如果原文件末尾没有换行,拷贝的文件也会再换一行。
bufw.flush();
}
}catch(IOException e){}
finally{
try{
if(bufw!=null)
bufw.close();
}catch(IOException e){}
try{
if(bufr!=null)
bufr.close();
}catch(IOException e){}
}
}
}
为了解决这种不完美,自己在重写一个自己想要的readLine读取方法,和调用者之间相互配合来弥补这种缺陷。
建立一个自己的BufferedReader.
package com.test;
import java.io.FileReader;
import java.io.IOException;
class MyBufferedReader {
private FileReader fr ;
private boolean flag =true ; //避免当原文件是个空文件时,拷贝的文件换行。
MyBufferedReader(FileReader fr){
this.fr = fr ;
}
public String myReadLine()throws IOException{
StringBuilder sb = new StringBuilder();
int len = 0 ;
while((len=fr.read())!=-1){
if(len=='\r')
continue;
if(len=='\n')
return sb.toString();
else{
flag=false; //不是空文件,让标记改变,好让下面的返回的换行有可能语句执行到
sb.append((char)len);
}
}
if(sb.length()!= 0){ //原文件的就会一行有内容但没有换行
flag=true;
return sb.toString();
}
if(!flag){ //当源文件的最后一行没有内容,只是单纯的换行,那么返回换行原句使拷贝文件换行。
flag=true;
return "\r\n" ;
}
return null;
}
public void myClose()throws IOException{
fr.close();
}
}
有了上面重写的类,下面的主函数就很好写了
package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 用缓冲区拷贝一个java文件。
*/
public class BufferedTest {
public static void main(String[] args) {
BufferedWriter bufw = null ;
MyBufferedReader bufr = null ;
try{
bufw = new BufferedWriter(new FileWriter("G:\\Stu_copy.java"));
bufr = new MyBufferedReader(new FileReader("G:\\Stu.java"));
String line=bufr.myReadLine() ;
while(line!=null){
bufw.write(line);
bufw.flush();
if((line=bufr.myReadLine())!=null)
if(!(line.equals("\r\n")))
bufw.newLine();
}
}catch(IOException e){}
finally{
try{
if(bufw!=null)
bufw.close();
}catch(IOException e){}
try{
if(bufr!=null)
bufr.myClose();
}catch(IOException e){}
}
}
}