2

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.

4 Answers 4

2

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]);
Sign up to request clarification or add additional context in comments.

Comments

1

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}

Comments

0

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);
    }
}

Comments

0
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();
        }
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.