I would define the file as a field (in addition to the filename, and I suggest reading it from the user's home folder) file
private File file = new File(System.getProperty("user.home"), filename);
Then you can use the diamond operator <> when you define your List. You can use a try-with-resources to close your Scanner. You want to read by lines. And you can split your line. Then you test if your first column matches the name. If it does, iterate the other columns are parse them to int. Something like
public List<Integer> loadDataFor(String name) throws IOException {
List<Integer> data = new ArrayList<>();
try (Scanner s = new Scanner(file)) {
while (s.hasNextLine()) {
String[] row = s.nextLine().split("\\s+");
if (row[0].equalsIgnoreCase(name)) {
for (int i = 1; i < row.length; i++) {
data.add(Integer.parseInt(row[i]));
}
}
}
}
return data;
}
It might be signifanctly more efficient to scan the file once and store the names and fields as a Map<String, List<Integer>> like
public static Map<String, List<Integer>> readFile(String filename) {
Map<String, List<Integer>> map = new HashMap<>();
File file = new File(System.getProperty("user.home"), filename);
try (Scanner s = new Scanner(file)) {
while (s.hasNextLine()) {
String[] row = s.nextLine().split("\\s+");
List<Integer> al = new ArrayList<>();
for (int i = 1; i < row.length; i++) {
al.add(Integer.parseInt(row[i]));
}
map.put(row[0], al);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
Then store that as fileContents like
private Map<String, List<Integer>> fileContents = readFile(filename);
And then implement your loadDataFor(String) method with fileContents like
public List<Integer> loadDataFor(String name) throws IOException {
return fileContents.get(name);
}
If your usage pattern reads the File for many names then the second is likely to be much faster.