Stuck on what? If you don't know how to ask the user for a file name, you have not paid attention in previous lessons.
Don't try to write a large program all at once. You'll confuse yourself, and anyone who tries to help you with it.
Start with a portion you think you know how to write and do that. The first version might just ask for a file name, open the file, and display a message if the open fails. That will get your user-input logic started and see that you have the text file in the right place. If you have a problem, then you are debugging a very simple program. You can use a Scanner to read a stream of numbers from a file with nextDouble(), or read text lines with the nextLine() method. A sample to "open" such a scanner is:
Scanner readMat1;
String mat1Name = "matrix1.txt"; // fixed name for testing
try {
.... readMat1 = new Scanner(File(mat1Name));
}
catch (FileNotFoundException ex) {
.... System.out.println( "File not found: " + mat1Name );
.... mat1Name = null; // signal that open failed
}
// If open succeeded, say so. Replace this with matrix reading code later.
if (readMat1 != null) {
.... System.out.println( "Open succeeded on " + mat1Name );
.... readMat1.close(); // always a good idea to close files when done with them
.... readMat1 = null; // reset to null so nobody tries to read, or close again
}
That's some basic file handling using Scanner and File objects. A File alone does not have any I/O capability. It mainly represents a file name (path, actually.) You need a Scanner or some kind of Reader or InputStream to actually read data. Scanners are easier and I expect you already know how to use them from previous assignments.
When you get a version coded and tested, then go on to the next version. You might want to do a save-as between steps to save a copy of known-working code up to that point.
Work in small steps. Version 1 might use a do {} while (readMat1==null); loop to do that "repeat previous action".
If you are expected to make a Matrix class, do that as a separate task and write a test program that runs each constructor and method and verifies that the results are reasonable. Each time you update that class, you can re-run that test program to be sure nothing's broken. As you add new methods, update the test program to include tests that use that new method. Keep all of the old tests, so that everything gets tested every time. The tester can be silent on a test that succeeds, or print out a very short "OK" message so that it's clear looking at the output whether any errors were detected.