User9123
User9123

Reputation: 774

Scanning integer and string from file in Java

I'm new to Java and I have to read from a file, and then convert what I have read into variables. My file consists of a fruit, then a price and it has a long list of this. The file looks like this:

Bananas,4
Apples,5
Strawberry,8
...
Kiwi,3

So far I have created two variables(double price and String name), then set up a scanner that reads from the file.

public void read_file(){
    try{
        fruits = new Scanner(new File("fruits.txt"));
        print_file();
    }
    catch(Exception e){
        System.out.printf("Could not find file\n");
    }                
}
public void print_file(){

    while(fruits.hasNextLine()){
        String a = fruits.nextLine();
        System.out.printf("%s\n", a);
        return;
    }
}

Currently I am only able to print out the entire line. But I was wondering how I could break this up to be able to store the lines into variables.

Upvotes: 2

Views: 777

Answers (4)

Ruwanka De Silva
Ruwanka De Silva

Reputation: 3755

Using java 8 stream and improved file reading capabilities you can do it as follows. it stores item and count as key value pair in a map. It is easy to access by key afterwards.

I know this Maybe too advance but eventually this will help you later when getting to know new stuff in java.

try (Stream<String> stream = Files.lines(Paths.get("src/test/resources/items.txt"))) {
    Map<String, Integer> itemMap = stream.map(s -> s.split(","))
            .collect(toMap(a -> a[0], a -> Integer.valueOf(a[1])));
    System.out.println(itemMap);
} catch (IOException e) {
    e.printStackTrace();
}

output

{Apples=5, Kiwi=3, Bananas=4, Strawberry=8}

Upvotes: 1

Amit Kumar Lal
Amit Kumar Lal

Reputation: 5799

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

public class Test {

    public static void main(String[] args) {
        BufferedReader reader;
        try {
            reader = new BufferedReader(new FileReader(
                    "C://Test/myfile.txt")); //Your file location
            String line = reader.readLine(); //reading the line
            while(line!=null){
                if(line!=null && line.contains(",")){
                    String[] data = line.split(",");
                    System.out.println("Fruit:: "+data[0]+" Count:: "+Integer.parseInt(data[1]));
                }
                //going over to next line
                line  = reader.readLine();
            }               
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Upvotes: 0

chandra
chandra

Reputation: 500

You can specify a delimiter for the scanner by calling the useDelimiter method, like:

public static void main(String[] args) {
    String str = "Bananas,4\n" + "Apples,5\n" + "Strawberry,8\n";

    try (Scanner sc = new Scanner(str).useDelimiter(",|\n")) {
        while (sc.hasNext()) {
            String fruit = sc.next();
            int price = sc.nextInt();

            System.out.printf("%s,%d\n", fruit, price);
        }
    } catch (Exception e) {
        e.printStackTrace(System.out);
    }
}

Upvotes: 0

Kaushal28
Kaushal28

Reputation: 5575

So your string a has an entire line like Apples,5. So try to split it by comma and store it into variables.

String arr[] = a.split(",");
String name = arr[0];
int number = Integer.parseInt(arr[1]); 

Or if prices are not integers, then,

double number = Double.parseDouble(arr[1]);

Upvotes: 2

Related Questions