Constructor that receives TXT files to read and store them

Tags:



Firstly i already have this code:

public class TextTest {
public static void main(String[] args) {    
    try {
        List<Text> v = new ArrayList<Text>();       
        v.add(new Text(args[0]));
        v.add(new Text(args[1]));
        v.add(new Text(args[2]));       
        System.out.println(v); 
        Collections.sort(v);        
        System.out.println(v);
    }
    catch ( ArrayIndexOutOfBoundsException e) {
        System.err.println("Enter three files for comparation");
    }
}   

And i need to create a class called Text with gonna contain the code who will open and read the TXT file. But, how i build the constructor to receive the directory with gonna contains the 3 TXT files, and at the same time, create the archives and read them? The files will be stored here:

        v.add(new Text(args[0]));
        v.add(new Text(args[1]));
        v.add(new Text(args[2]));

Answer

Say you have 3 text files text1.txt, text2.txt, and text3.txt with the following contents:

text1.txt:

A B C D E F G H I J 

text2.txt:

A B C D E F G H I J K L M N O

text3.txt:

A B C D E F G H I J K L

You could make Text implement Comparable<Text>:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Text implements Comparable<Text> {
    private final String fileName;
    private String fileData;
    private int wordCount;

    public Text(String filePath) {
        File file = new File(filePath);
        this.fileName = file.getName();
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
            StringBuilder sb = new StringBuilder();
            String line = bufferedReader.readLine();
            int wordCount = 0;
            while (line != null) {
                wordCount += line.split(" ").length;
                sb.append(line);
                sb.append(System.lineSeparator());
                line = bufferedReader.readLine();
            }
            this.fileData = sb.toString().strip();
            this.wordCount = wordCount;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getFileData() {
        return this.fileData;
    }

    @Override
    public String toString() {
        return String.format("%s [%d]", this.fileName, this.wordCount);
    }

    @Override
    public int compareTo(Text t) {
        if (this.wordCount == t.wordCount) {
            return this.fileData.compareTo(t.getFileData());
        }
        return this.wordCount - t.wordCount;
    }
}

Example Usage:

$ javac TestText.java Test.java
$ java TextText text1.txt text2.txt text3.txt
[text1.txt [10], text2.txt [15], text3.txt [12]]
[text1.txt [10], text3.txt [12], text2.txt [15]]


Source: stackoverflow