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

后端 未结 9 1636
长发绾君心
长发绾君心 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:10

    First you have to read the file line by line and add each line to a list. Once the file is read completely, you can print each element in the list in reverse order as shown below:

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class FileReader {
    
        public static List<String> readFile() throws IOException {
            List<String> fileContents = new ArrayList<String>();
            FileInputStream fileInputStream = new FileInputStream("C:/Users/compaq/Desktop/file.txt");
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String strLine = null;
            while((strLine=bufferedReader.readLine())!=null) {
                fileContents.add(strLine);
            }
            fileInputStream.close();
            return fileContents;
        }
    
        public static void printFileInReverse(List<String> fileContents, int numberOfLines) {
            int counter = 0;
            for(int i=(fileContents.size()-1);i>=0;i--) {
                if(counter==numberOfLines) { break; }
                System.out.println(fileContents.get(i));
                counter++;
            }
        } 
    
        public static void main(String[] args) throws IOException {
            List<String> fileContents = new ArrayList<String>();
            fileContents = FileReader.readFile();
            int numberOfLines = 5;// Number of lines that you would like to print from the bottom of your text file.
            FileReader.printFileInReverse(fileContents, numberOfLines);
        }
    
    }
    
    0 讨论(0)
  • 2020-12-15 03:15

    Please try this code. It is working fine for me.

    public static void main(String[] args)
    {
        try
        {
            int numOfLastline = 10;
            BufferedReader reader = new BufferedReader(new FileReader("Text.txt"));
            int lines = 0;
            while (reader.readLine() != null)
                lines++;
            reader.close();
    
            System.out.println(lines);
    
            String printedLine = null;
            List<String> listForString = new ArrayList<String>();
            for (int i = lines - 1; i >= (lines - numOfLastline); i--)
            {
                printedLine = (String) FileUtils.readLines(new File("Text.txt"), "ISO-8859-1").get(i);
                System.out.println(printedLine);
                listForString.add(printedLine);
            }
    
            System.out.println("\n\n============ Printing in Correct order =============\n\n");
            Collections.reverse(listForString);
    
            for (int k = 0; k < listForString.size() ; k++)
            {
                System.out.println(listForString.get(k));
            }
    
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    

    Note : Provide your needed last line numbers at numOfLastline and file [instead of this Text.txt].

    0 讨论(0)
  • 2020-12-15 03:18

    Try this code, a list of length 5 is scanned through all the lines, finally the list is reversed. I edited / modified your code, test it to see it's fully working.

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    public class Test
    {
        public static void main(String[] args) throws Exception
        {
            ArrayList<String> bandWidth = new ArrayList<String>();
            FileInputStream in = new FileInputStream("file.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
    
            String tmp;
            while ((tmp = br.readLine()) != null)
            {
                bandWidth.add(tmp);
                if (bandWidth.size() == 6)
                    bandWidth.remove(0);
            }
    
            ArrayList<String> reversedFive = new ArrayList<String>();
            for (int i = bandWidth.size() - 1; i >= 0; i--)
                reversedFive.add(bandWidth.get(i));
            in.close();
        }
    }
    
    0 讨论(0)
  • 2020-12-15 03:20

    If all it really does have to do is print last 5 lines:

            ArrayList<String> lines = new ArrayList<String>();
    
            String tmp="";
            while ((tmp = br.readLine()) != null) {
                lines.add(tmp);
            }
            for (int i = lines.size()-5; i < lines.size(); i++) {
                System.out.println(lines.get(i-1));
            }
    
    0 讨论(0)
  • 2020-12-15 03:27

    One very easy way would be to use the CircularFifoBuffer class from the Apache Commons Collections library. It's basically a list of a fixed size that discards old elements when it's full and you add new ones. So you'd create a CircularFifoBuffer of size 5, then add all the lines to it. At the end, it'd contain just the last five lines of the file.

    0 讨论(0)
  • 2020-12-15 03:28

    Try this. This give for last 5 line.

     public static void main(String[] args) throws IOException {
                List<String > list =new ArrayList<String>();
                FileInputStream in = new FileInputStream("C:/adminconsole.txt");
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
    
                String strLine ="", tmp;
                while ((tmp = br.readLine()) != null){ 
                    //strLine =tmp+"\n"+strLine;
                    list.add(tmp);
                    }
    
                if(list.size()>5){
                    for (int i=list.size()-1; i>=(list.size()-5); i--) {
                        System.out.println(list.get(i));
                    }
                }else{
                    for (int i=0; i<5; i++) {
                System.out.println(list.get(i));
            }
    
                }
    
            }
        }
    
    0 讨论(0)
提交回复
热议问题