vrijdag 7 mei 2010

Write a file in reversed order.


import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.util.Vector;

public class MaxFileReversed {

    // writes a file with reversed lines
    public void write(String fileNaam, PrintWriter
writer) {
        RandomAccessFile raf;
        try {
            raf = new
RandomAccessFile(fileNaam, "r");
          
 Vector<Long> linePointers = new Vector<Long>();
          
 a_BuildLinePointersVector(raf, linePointers, fileNaam);
          
 b_WriteFile(linePointers, raf, writer);
        } catch (FileNotFoundException e){
          
 e.printStackTrace();
        }
    }

    private void
a_BuildLinePointersVector(RandomAccessFile raf, Vector<Long>
linePointers, String fileNaam) {
        linePointers.add(0L);
        do {
            try {
              
 if (raf.readLine() != null) { // End Of File reached?
              
     linePointers.add(raf.getFilePointer());
              
 } else {
              
     return;
              
 }
            } catch
(IOException e) {
              
 // TODO Auto-generated catch block
              
 e.printStackTrace();
            }
        } while (true);
    }

    private void b_WriteFile(Vector<Long>
linePointers, RandomAccessFile raf, PrintWriter writer) {
        // ignore the last pointer in the
Vector, that points 2 End Of File
        int nLines = linePointers.size()
- 2;
        for (int i = nLines; i > -1;
i--) {
            try {
              
 Long linePointer = linePointers.get(i);
              
 raf.seek(linePointer);
              
 writer.println(raf.readLine());
            } catch
(IOException e) {
              
 e.printStackTrace();
            }
        }
    }

}