'reading text from a relative file path

I have an absolute file path in my java program that contains some text. This is the code:

import java.io.*;
import java.util.*;

public class RoughCode {
    public static void main(String[] args)  {
        try {
            File rules=new File("C:\\Users\\Owner\\Documents\\ICS4U\\Assignment 1\\GameShowRules.txt");
            
            Scanner scan=new Scanner(rules);// scans the file 'rules'
            
            while (scan.hasNextLine()) {
                
                System.out.println(scan.nextLine());// outputs 'rules' to console
            }
        }
        catch(Exception e) {
            System.out.println("File not found");
            System.exit(0);
        }
    }
}

Here, the code works just fine. The output I get is whatever is stored in the file, which is:

The rules of the game are: You must answer 15 multiple-choice questions correctly in a row to win the jackpot. You may quit at any time and keep the earnings.

However, what I need is a relative file path so that it runs on any laptop. In an attempt to do that, I did:

import java.io.*;
import java.net.URI;
import java.util.*;

public class RoughCode {
    
    
    public static void main(String[] args)  {
        try {
            
            // Two absolute paths
              File absolutePath1 = new File("C:\\Users\\Owner\\Documents\\ICS4U\\Assignment 1\\GameShowRules.txt");
             
              File absolutePath2 = new File("C:\\Users\\Owner\\Documents\\ICS4U\\Assignment 1");
              

              // convert the absolute path to URI
              URI path1 = absolutePath1.toURI();
              URI path2 = absolutePath2.toURI();

              // create a relative path from the two paths
              URI relativePath = path2.relativize(path1);

              // convert the URI to string
              String path = relativePath.getPath();
              
            
            
            Scanner scan=new Scanner(path);
            
            while (scan.hasNextLine()) {
                
                System.out.println(scan.nextLine());
            }
        }
        catch(Exception e) {
            System.out.println("File not found");
            System.exit(0);
        }
    }
}

This does not display the text I need. it just displays "GameshowRules.txt". How do I get it to output the text stored in the file? Thanks



Solution 1:[1]

Try to use BufferedReader and FileReader. My "data.txt" file is in the same folder as the java program, and works just fine.

I guess you know where will be file of your own program, so you can paste relative path to it.

It looks like this

public class Project {
    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new FileReader("data.txt"));

        String data;

        while ((data = reader.readLine()) != null) {

            System.out.println(data);
        }
   }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1