java 把一个文件写入到另一个文件中

来源:互联网 发布:sql server rank over 编辑:程序博客网 时间:2024/04/29 22:06

     文件的读取与写入一般有三种,按字节写,按字符写,按行写。对于按字符本人不是很了解,对于按字节与按行写了解比较多。

     一,对于按字节写一般是定义字节数组,然后通过read方法把字节流写入到字节数组即可。(其实对于字节的操作,在java网络的编程中用得比较多,如果中间牵涉到数据是按字节传输的时候,对于字节操作是需要很细致的,这个时候如何把字节跟字符串互换,然后进行相识的操作在解析数据,这里面有很多问题,写服务器时解决不少,不少心得在以后再写。今天先完成文件夹的读写):

     对于按字节写相对而言还是比较简单的,如:

     FileInputStream  fs = new FileInputStream(new FIle("test.txt"))

     byte[] result = new byte[1024];//长度具体情况具体定义了。很有学问

     fs.read(result);这样就可以把所有的内容读入到字节数组result中了。

     如果是字符的话,相信也是类似的方法~

 

    二,对于按行读取,今天我需要把一个文件里每六行存取成另一个文件的一行,直到所有的数据读取完。(具体我的应用还有把新生成的文件每一行存储到数据库中去,都是差不多的功能了,不过之后我还需要把字符什么的按一定要求转换为字节,并封装进行转输,这个之间还是有很多问题的--)

    至于文件隔行存储,方法如下:(我程序中的方法)

     /**
  *
  *从一个文件每六行读取到另一个文件中。
  *
  **/
 public void readFile(String readfile,String writefile){
 
  try{
  
   FileReader fr = new FileReader(readfile);
   FileWriter fw = new FileWriter(writefile);
  
   BufferedReader br = new BufferedReader(fr);
   BufferedWriter bw = new BufferedWriter(fw);
  
   int i = 0;//记录行数的标识。
   StringBuffer sb = new StringBuffer();
   String temp = br.readLine();
   //当读取六行,则通过bw写到写文件中。
   while(temp != null){
   
    i += 1;
    sb.append(temp);
    if(i == 6){//如果到六行,则把拼接的一行写到文件中。
    
        bw.write(new String(sb));
        bw.newLine();//换行符
        bw.flush();//需要急时涮新流的缓冲区,不然写文件时,当缓冲区满就再也写不进去了
     i = 0;
     sb = new StringBuffer();
    }
   
    temp = br.readLine();
   }
   //如果最后不到六行,且写到末尾,则把所有余下的写到文件中。
 
   if(sb.length() > 0){
   
    bw.write(new String(sb));
    bw.newLine();
    bw.flush();
    bw.close();//关闭方法在涮新以后,
   }
  
   br.close();
   System.out.println("转写文件完成");
  }catch(Exception e){
  
      e.printStackTrace();
  }
 }

 

在方法实现的整个过程中并没有什么大的问题,但出现了当写入文件达到16KB时就再也写不进去了,当时被这问题给难住了,在网上查找答案时还有人说写到64KB时不能再写了,我想应该是一样的问题,当有人提出这个问题时,很多人嘲笑,说什么不可能,我还有写几G的文件,其实笑别人的人还是没帮助人解决这个问题,还好有高手提出了是否流没有flush,当我在看到这句回复时,顿时感觉高手就是高手。相信这是经验的原因吧,

 

所以程序这句很重要:bw.flush();//需要急时涮新流的缓冲区,不然写文件时,当缓冲区满就再也写不进去了

 

原创粉丝点击