Friday, 22 May 2015

Read data from file and sort

A Program to read data from file add it to Collection of object and sort.


file.txt
Ahmed 40
Ali 30

Student.java

package com.ali.fileprogram;

public class Student implements Comparable<Student>{

    private int marks;
    private String name;
   
    public int getMarks() {
        return marks;
    }
   
    public void setMarks(int marks) {
        this.marks = marks;
    }
   
    public String getName() {
        return name;
    }
   
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Student student) {
        // TODO Auto-generated method stub
        int compareMarks = student.getMarks();
       
        //ascending order
        return this.marks - compareMarks;

        //descending order
        //return compareMarks - this.marks;
    }
}



Main.java

package com.ali.fileprogram;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
       
    public static void main(String[] args) {
        List<Student> students = new ArrayList<Student>();
        try{
            File file = new File("file.txt");
            Scanner scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
                students.add(Main.parseLine(scanner.nextLine()));
            }
            scanner.close();
            Collections.sort(students);
            for(Student student : students){
                System.out.println(student.getName() + " : " + student.getMarks());
            }
        }catch(FileNotFoundException exception){
            System.out.println("File Not Found Exception : " + exception);
        }
    }
    public static Student parseLine(String line){
        //use a second Scanner to parse the content of each line
        Scanner scanner = new Scanner(line);
        scanner.useDelimiter(" ");
        Student student = new Student();
        if (scanner.hasNext()){
          //assumes the line has a certain structure
            student.setName(scanner.next());
            student.setMarks(Integer.parseInt(scanner.next()));
        }
        scanner.close();
        return student;
    }
}




Result:
Ali : 30
Ahmed : 40

No comments:

Post a Comment