读取流,重写流,删除文件,重新生成
文件的操作,好像java只能这样做

解决方案 »

  1.   

    我想删除文件中的一些行用java怎么实现,请给个例子:
    文件如下:
    name: ffff  ssss
    seq
    001   9   k   aaa
    002   9   k   kkk
    mcd sss
    dsdif
    003   7   k    jfksname: daad  ssss
    seq
    001   9   k   aaa
    002   9   k   kkkname: sssa  ssss
    seq
    001   9   k   aaa
    002   9   k   kkk
    mcd sss
    dsdif
    003   7   k    jfks
    004   2        ksjfka
    mnak  
    kadjfa  kasjdf
    005   3   k    ksajf
    我想删除002到003之间的行和004到005之间的行.
    请各位大侠帮忙!
      

  2.   

    上面的例文经过重写后应该是这种格式:
    name: ffff  ssss
    seq
    001   9   k   aaa
    002   9   k   kkk
    003   7   k    jfksname: daad  ssss
    seq
    001   9   k   aaa
    002   9   k   kkkname: sssa  ssss
    seq
    001   9   k   aaa
    002   9   k   kkk
    003   7   k    jfks
    004   2        ksjfka
    005   3   k    ksajf
      

  3.   

    关注
    String nameofonlin="d:\\onlineusers.txt";
      BufferedReader filereader=new BufferedReader(new FileReader(nameofonlin));
      String readonline=null;
      int rowcount=0;
      String ip=request.getRemoteAddr();
      int writeonline=0;
       
       FileWriter f=new FileWriter(nameofonlin,true);
       PrintWriter myout=new PrintWriter(f);
       myout.println(ip+"\n");
       myout.close();  readonline=filereader.readLine();
      while(readonline.length()+1>rowcount)
      {
       if(ip.equals(readonline))
       {
        
       
       }
       rowcount++; 
       filereader.close();
      }我是像上面这样遍历所有行取得与一设定值相同的值
    然后删除之,
    不过我不知道怎么样删除能否告之?
      

  4.   

    基本同意2楼的,但JAVA里面还有一种方法可以实现,
    用RandomAccessFile 
    这个类中有方法可以自由的定位指针的位置,
    但是个人认为操作的难度性比较大,
    而且性能不一定高
      

  5.   

    在如今大内存的状况下,读取流,重写流并不会很影响性能的,我这刚好写了几个这样的方法,请高手指教。
      /**
       * 把需修改文件读入StringBuffer
       * @param filepath 模版源文件(*.html)
       * @return StringBuffer 把源文件转换成StringBuffer
       * @throws IOException
       */
      public static StringBuffer readFile(String filepath)
          throws IOException {
        StringBuffer sbf = new StringBuffer();
        byte buf[] = new byte[2048];
        FileInputStream fis = new FileInputStream(filepath);
        while(fis.read(buf) != -1) {
          sbf.append(new String(buf));
          buf = new byte[2048];
        }
        fis.close();
        return sbf;
      }
      /**
       * 根据StringBuffer生成文件
       * @param filepath 保存文件的路径,最后生成的模版文件(*.jsp)
       */
      public static void writeFile(String filepath,StringBuffer source)
          throws IOException {
        FileOutputStream fos = new FileOutputStream(filepath);
        byte buf[] = new byte[source.length()];
        buf = source.toString().getBytes();
        fos.write(buf);
        fos.close();
      }  /**
       * 用于StringBuffer中的字符串替换
       * @param source 需要替换的StringBuffer
       * @param strS 被替换的字符串
       * @param strD 用于替换的字符串
       * @return 返回一个StringBuffer
       */
      public static StringBuffer replace(StringBuffer source,String strS,String strD) {
        int start = source.indexOf(strS);
        int offset = start + strS.length();
        if((start != -1) && (offset > start)) {
          source.replace(start,offset,strD);
        }
        return source;
      }  /**
       * 根据开始strStart和strEnd提取包含在source中的这段字符串,用于生成头、尾文件
       * @param source 源StringBuffer
       * @param strStart 开始标记
       * @param strEnd 结束标记
       * @return 返回提取后的StringBuffer
       */
      public static StringBuffer takeout(StringBuffer source,String strStart,String strEnd) {
        int start = source.indexOf(strStart) + strStart.length();
        int end = source.indexOf(strEnd);
        if(end > start)
          source = new StringBuffer(source.substring(start,end));
        return source;
      }