Rauryn
Rauryn

Reputation: 177

readFile method does not show results at console

This is my question :

     a method readLine that reads a line from the file specified in fileName and returns the line a String.

What I am trying to do is I read and write some info into text file using eclipse. And here are my codes :

    public class FileController {
private String fileName;

public FileController(){
    String fileName = "student.txt";
}

public FileController(String fileName){
    this.fileName = fileName;
}

public String readLine(){
    String line ="";
    try{
        FileReader fr = new FileReader(fileName);
        Scanner sc = new Scanner(fr);
        while(sc.hasNextLine()){
            Student stud = new Student(sc.nextLine());
            line = stud.toString();
        }
        fr.close();
    }catch(FileNotFoundException exception){
        System.out.println("File " + fileName + " was not found");
    }catch(IOException exception){
        System.out.println(exception);
    }
    return line;
}

public void writeLine(String input){
    try{
        FileWriter fw = new FileWriter(fileName,true);
        BufferedWriter bw = new BufferedWriter(fw);
        PrintWriter outFile = new PrintWriter(bw);

        outFile.println(input);
        outFile.close();
    }catch(IOException exception){
        System.out.println(exception);
    }
}

public static void main (String [] args){
    FileController fc = new FileController("student.txt");
    String input = "1234567H;Gabriel;23/12/1994;56;67;87";
    fc.readLine();
    fc.writeLine(input);
}

This works perfectly by adding the record into the text file. However, the console there doesn't shows the result. So from what I know it's the mistake was at readLine(). When I used void it works perfectly. But the question requests me to return a String. Anybody know how to solve this?

Upvotes: 0

Views: 1126

Answers (1)

Lokesh
Lokesh

Reputation: 7940

You are overwriting the line in while loop:

try{
        FileReader fr = new FileReader(fileName);
        Scanner sc = new Scanner(fr);
        while(sc.hasNextLine()){
            Student stud = new Student(sc.nextLine());
            line = stud.toString();
        }

So this means that only last line will get passed to student [most likely blank line] and it might not print anything or even an exception might come. Use StringBuffer and append the string and then return that.

EDIT:

Try this.

public String readLine(){
    StringBuffer line =new StringBuffer();
    try{
        FileReader fr = new FileReader(fileName);
        Scanner sc = new Scanner(fr);
        while(sc.hasNextLine()){
            Student stud = new Student(sc.nextLine());
            line.append(stud.toString());
        }
        fr.close();
    }catch(FileNotFoundException exception){
        System.out.println("File " + fileName + " was not found");
    }catch(IOException exception){
        System.out.println(exception);
    }
    return line.toString();
}

EDIT: If above code also returns blank then most likely issue is Strudent "toString()" method. It might be returning blank.

EDIT:

public String readLine(){
        StringBuffer line =new StringBuffer();
        try{
            FileReader fr = new FileReader(fileName);
            Scanner sc = new Scanner(fr);
            while(sc.hasNextLine()){
                Student stud = new Student(sc.nextLine());
                line.append(stud.toString());
                line.append("\n");
            }
            fr.close();
        }catch(FileNotFoundException exception){
            System.out.println("File " + fileName + " was not found");
        }catch(IOException exception){
            System.out.println(exception);
        }
        return line.toString();
    }

Upvotes: 1

Related Questions