How to read last 5 lines of a .txt file into java

后端 未结 9 1637
长发绾君心
长发绾君心 2020-12-15 03:03

I have a text file that consists of several entries such as:

hello
there
my
name
is
JoeBloggs

How would I read the last five entries in des

相关标签:
9条回答
  • 2020-12-15 03:31

    Follow This Code To Improve Core Java Logic By Using Collectios.

    import java.io.FileNotFoundException;
        import java.io.FileReader;
        import java.util.ArrayList;
        import java.util.Collection;
        import java.util.Collections;
        import java.util.Scanner;
    
        public class REVERSE {
            public static void main(String[] args) {
                ArrayList<String> al = new ArrayList<String>();
                try {
                    Scanner sc = new Scanner(new FileReader("input.txt"));
                    while (sc.hasNextLine()) {
                        al.add(sc.nextLine());
                    }
                    System.out.println(al.get(0));
                    System.out.println(al.get(1));
                    System.out.println(al.get(2));
                    System.out.println(al.get(3));
                    System.out.println(al.get(4));
    
                    Collections.reverse(al);
                    /*
                     * for (String s : al) { System.out.println(s); }
                     */
                    System.out.println(al.get(0));
                    System.out.println(al.get(1));
                    System.out.println(al.get(2));
                    System.out.println(al.get(3));
                    System.out.println(al.get(4));
                    /*
                     * for (int i = 0; i < al.size(); i++) {
                     * System.out.println(al.get(i)); }
                     */
                } catch (FileNotFoundException e) {
    
                }
    
            }
        }
    
    0 讨论(0)
  • 2020-12-15 03:32

    You can add the lines to a List, e.g. a LinkedList. When the list has more than five lines, remove the first/last.

    List<String> lines = new LinkedList<String>();
    for(String tmp; (tmp = br.readLine()) != null;) 
        if (lines.add(tmp) && lines.size() > 5) 
            lines.remove(0);
    
    0 讨论(0)
  • 2020-12-15 03:36

    we can use MemoryMappedFile for printing last 5 lines:

    private static void printByMemoryMappedFile(File file) throws FileNotFoundException, IOException{
            FileInputStream fileInputStream=new FileInputStream(file);
            FileChannel channel=fileInputStream.getChannel();
            ByteBuffer buffer=channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
            buffer.position((int)channel.size());
            int count=0;
            StringBuilder builder=new StringBuilder();
            for(long i=channel.size()-1;i>=0;i--){
                char c=(char)buffer.get((int)i);
                builder.append(c);
                if(c=='\n'){
                    if(count==5)break;
                    count++;
                    builder.reverse();
                    System.out.println(builder.toString());
                    builder=null;
                    builder=new StringBuilder();
                }
            }
            channel.close();
        }
    

    RandomAccessFile to print last 5 lines:

    private static void printByRandomAcessFile(File file) throws FileNotFoundException, IOException{
            RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
            int lines = 0;
            StringBuilder builder = new StringBuilder();
            long length = file.length();
            length--;
            randomAccessFile.seek(length);
            for(long seek = length; seek >= 0; --seek){
                randomAccessFile.seek(seek);
                char c = (char)randomAccessFile.read();
                builder.append(c);
                if(c == '\n'){
                    builder = builder.reverse();
                    System.out.println(builder.toString());
                    lines++;
                    builder = null;
                    builder = new StringBuilder();
                    if (lines == 5){
                        break;
                    }
                }
    
            }
        }
    
    0 讨论(0)
提交回复
热议问题