Mam tę metodę, która korzysta z pliku standardowego, jeśli nie ma argumentów, w przeciwnym razie używa tego w argumencie.

public class MainAnimal {
    public static void main(String[] args) {
        Parser parse = new Parser();
        if ((args == null) || (args.length == 0)) {
            File file = parse.getFile("findAnAnimal.csv");
        } else {
            System.out.println(args[0]);
        }
        List<String[]> animalList = parse.readFileAndParse(Paths.get(String.valueOf(file)));

Jednak file wychodzi z błędu zakresu. Wiem, dlaczego, ponieważ jest lokalny bloku if. Ale co może być w tym obejściem?

0
Harry 27 luty 2019, 00:51

2 odpowiedzi

Najlepsza odpowiedź

Najprostszym sposobem na naprawę tego bloku:

if ((args == null) || (args.length == 0)) {
   File file = parse.getFile("findAnAnimal.csv");
} else {
   System.out.println(args[0]);
}

W:

File file = null;
if ((args == null) || (args.length == 0)) {
   file = parse.getFile("findAnAnimal.csv");
} else {
   System.out.println(args[0]);
}

Należy pamiętać, że twoja ostatnia linia:

 List<String[]> animalList = parse.readFileAndParse(Paths.get(String.valueOf(file)));

Zakłada, że plik nie jest null. Powinieneś sprawdzić, czy plik jest wcześniej zerowy lub umieszczony w istniejącym, jeśli ... Elustrowanie natychmiast po otrzymaniu pliku.

1
SitaNVGS 26 luty 2019, 21:59

Wystarczy zadeklarować plik poniżej, jeśli / jeszcze blok. Ustaw zmienną "FileName", która domyślnie domyślnie "findananimi.csv" nad blokiem IF i zastępuje go, jeśli występuje argument. Będzie to bardziej solidne.

public class MainAnimal {
    public static void main(String[] args) {
        Parser parse = new Parser();
        String filename = "findAnAnimal.csv"
        if ((args == null) || (args.length == 0)) {
            // do nothing
        } else {
            filename = args[0];
        }

        System.out.println("reading " + filename);
        File file = parse.getFile(filename);
        List<String[]> animalList = parse.readFileAndParse(Paths.get(String.valueOf(file)));
0
aglassman 26 luty 2019, 21:58