Добавить счетчик строк в Buffer Reader Java - PullRequest
0 голосов
/ 06 декабря 2018

Мне дано задание, в котором я должен использовать буферизованный считыватель для чтения файла, а также подсчитать количество строк в моем файле.После этого я должен разделить и разобрать его.Может кто-нибудь помочь?

package javaapplication12;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;



public class JavaApplication12 {


    public static void main(String[] args) {

        String count= "F:\\Gephi\\number.txt";

                BufferedReader br = null;
        FileReader fr = null;

        try {


            fr = new FileReader(count);
            br = new BufferedReader(fr);


            String sCurrentLine;

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }


                    }    

                catch (IOException e) {

            e.printStackTrace();

                        }

Где-то здесь, я думаю, должен быть номер чтения строки в файле, наконец, {

            try {

                if (br != null)
                    br.close();

                if (fr != null)
                    fr.close();

            } 

                        catch (IOException ex) {

                ex.printStackTrace();

            }


                        if (count != null);

Здесь должно быть разделениеpart

                        String[] temp = count.split("/t");

После разбиения должен быть цикл for и использование массива, он должен быть проанализирован

}




    }

}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Довольно сложно прочитать ваш код.Пожалуйста, отформатируйте его в следующий раз.

Я создал файл с именем random_file.txt.Его содержимое следующее:

Это строка 1 ...

А это строка 2

Это еще одна строка ...

И еще один

И еще один

Теперь мы можем делать с файлом все, что вам нужно.Мы можем посчитать строки, распечатать каждую из них или разобрать их.Поскольку вы точно не указали, что вы хотите анализировать, я написал пример метода, который просто считает конкретное слово в файле.Синтаксический анализ должен выполняться с использованием RegularExpressions (regex).Вот хорошая ссылка для этого: http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FileParser
{
    private String filepath;

    public FileParser(String inputFilePath)
    {
        this.filepath = inputFilePath;
    }

    /**
     * Counts the number of lines.
     * 
     * @return Number of lines.
     * 
     * @throws FileNotFoundException If the file doesn't exist.
     * @throws IOException When an IO error occures.
     */
    public int countLines() throws FileNotFoundException, IOException
    {
        File file = new File(filepath);

        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        int counter = 0;
        while (br.readLine() != null)
        {
            counter++;
        }

        return counter;
    }

    /**
     * Splits the lines of the file and returns a list.
     * Each element of the list represents one line.
     * Note that the line seperator is excluded.
     * 
     * @throws FileNotFoundException If the file doesn't exist.
     * @throws IOException When an IO error occures.
     */
    public List<String> splitLines1() throws FileNotFoundException, IOException
    {
        File file = new File(filepath);

        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        String line;
        ArrayList<String> outputList = new ArrayList<>();
        while ((line = br.readLine()) != null)
        {
            outputList.add(line);
        }

        if (br != null) br.close();
        return outputList;
    }

    /**
     * Splits the lines of the file and returns a String.
     * Same as before, but now we have the line seperators included.
     * 
     * @throws FileNotFoundException If the file doesn't exist.
     * @throws IOException When an IO error occures.
     */
    public String splitLines2() throws FileNotFoundException, IOException
    {
        File file = new File(filepath);

        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);

        String line;
        StringBuilder builder = new StringBuilder();

        while ((line = br.readLine()) != null)
        {
            // we append every line to the builder
            // note that we get one line seperator more than
            // necessary (the one in the end)
            builder.append(line + System.lineSeparator());
        }

        if (br != null) br.close();
        return builder.toString();
    }

    /**
     * An example method for parsing. In this method we count the
     * number of times a word occures in given file.
     * 
     * @param word The word we are looking for.
     * 
     * @return Count the word occurencies.
     * 
     * @throws FileNotFoundException If the file doesn't exist.
     * @throws IOException When an IO error occures.
     */
    public int countOccurencies(String word)
            throws FileNotFoundException, IOException
    {
        List<String> fileLines = splitLines1(); // get the list, where each element represents one line
        int counter = 0;
        for (String line : fileLines)
        {
            // we split each line into words by splitting
            // at the spaces
            String[] words = line.split(" ");
            for (int i = 0; i < words.length; i++)
            {
                if (words[i].equals(word)) counter++;
            }
        }

        return counter;
    }

    /**
     * Testing the methods.
     */
    public static void main(String[] args) throws Exception
    {
        // Location of my file is in the project folder
        String filePath = System.getProperty("user.dir") + File.separator
                + "random_file.txt";
        FileParser fp = new FileParser(filePath);

        System.out.println("The file has " + fp.countLines() + " lines."
                + System.lineSeparator());

        System.out.println("We print a list holding each line as an element:");
        System.out.println(fp.splitLines1()
            .toString() + System.lineSeparator());

        System.out
            .println("Now we print the file contents as a single string:");
        System.out.println(fp.splitLines2());

        System.out
            .println("Now we count the occurencies of the word \"line\":");
        System.out.println(fp.countOccurencies("line"));
    }
}

Вот вывод консоли:

The file has 5 lines.

We print a list holding each line as an element:
[This is line 1 ..., And this is line number 2, This is another line ..., And one more, And another one]

Now we print the file contents as a single string:
This is line 1 ...
And this is line number 2
This is another line ...
And one more
And another one

Now we count the occurencies of the word "line":
3
0 голосов
/ 06 декабря 2018

Вы можете использовать метод lines в BufferedReader, чтобы получить Stream строк, разбить каждую строку и собрать ее в List

List<String[]> lines;
try(BufferedReader reader = new BufferedReader(new FileReader("path"))) {
    lines = reader.lines()
        .map(line -> line.split("\t"))
        .collect(Collectors.toList());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...