Получение исключения FileNotFoundException в Ubuntu 18.04 с помощью Java

Кажется, что компиляция моей java-программы работает нормально, но когда я пытаюсь запустить ее, используя файл в качестве одного из аргументов String [], я получаю исключение «файл не найден». Однако файл присутствует в каталоге, и я трижды проверил его написание. Вот что я пытаюсь сделать:  введите описание изображения здесь

А вот каталог, в котором четко виден мой файл  введите описание изображения здесь

И когда я выполняю команду ls в этом каталоге, отображаются только мои файлы .java и .class. Ни один из файлов .txt. Может ли это иметь какое-то отношение к моей проблеме? введите здесь описание изображения

Кто-нибудь может помочь?

Изменить: код файла, который я пытаюсь запустить

import java.io.File; 
import java.io.FileNotFoundException;
import java.util.Scanner; 
public class cs3421_emul {
    public static void main(String[] args) {
        try {
            String directory = System.getProperty("user.dir");
            directory = directory.replace("\\", "\\\\");
            //File file = new File(directory + "/" + args[0]);
            File file = new File(args[0]);
            Scanner sc = new Scanner(file);
            StreamHandler stream = new StreamHandler(sc);
            while(sc.hasNext()) {
                String datatype = sc.next();
                switch(datatype) {
                    case("memory"):
                        stream.HandleMemory();
                    break;
                    case("clock"):
                        stream.HandleClock();
                    break;
                    case("cpu"):
                        stream.HandleCPU();
                    break;
                }
            }
            sc.close();
        }
        catch(FileNotFoundException e) {
            System.out.print(e);
        } 
        /*
        String size = "0x10000";
        //System.out.println("resolve substring issue " + size.substring(2));
        Memory test = new Memory(size);
        test.reset();
        String[] hexvalues = {"0x0A", "0x0B", "0x2A", "0x2B", "0x11", "0x44", "0x23", "0x93", "0x50", "0x22", "0xAE", "0xDE", "0xAD", "0xBE", "0xEF", "0xFF"};
        test.set("0x1A00", "0x10", hexvalues);
        String[] hexvalues1 = {"0xAE", "0xDE", "0xAD", "0xC0", "0xDE", "0FA", "0xCE", "0xFE", "0xED", "0xCA", "0xFE", "0xBE", "0xEF", "0x30", "0xA8", "0xEE"};
        test.set("0x1A10", "0x10", hexvalues1);
        String[] hexvalues2 = {"0x55", "0xAA", "0x10", "0x20"};
        test.set("0x1A20", "0x04", hexvalues2);
        test.dump("0x1A04", "0x20");
        //String[] testmemory = test.getMemory();
         */
    }

}

person John Smith    schedule 22.09.2019    source источник
comment
И когда я выполняю команду ls для этого каталога, отображаются только мои файлы .java и .class. Ни один из файлов .txt. Может ли это иметь какое-то отношение к моей проблеме? это проблема. Вы уверены, что каталог на снимке экрана из проводника Windows (разве вы не использовали Ubuntu?) - это тот же каталог, в котором вы запускаете программу?   -  person Federico klez Culloca    schedule 22.09.2019


Ответы (2)


Здесь происходит что-то очень запутанное.

  1. Ваш первый снимок экрана показывает, что вы запускаете класс с именем cs3421_emul. Полагаю, это соответствует исходному коду. Он показывает, что вы находитесь в каталоге с именем /home/se/cs3421_emul.

    Предполагая, что вы не сделали чего-то действительно странного, этот каталог будет текущим каталогом при запуске команды (как показано на этом снимке экрана).

  2. Ваш второй снимок экрана - это представление каталога, описанного как LocalState > rootfs > home > se > cs3421_emul. Этот список каталогов показывает файл с именем Sample1_input.txt. Он НЕ показывает файл с именем cs3421_emul.class file.

  3. Ваш третий снимок экрана - результат выполнения ls в /home/se/cs3421_emul. Показывает cs3421_emul.class файл. Он НЕ показывает файл с именем Sample1_input.txt.

Из этого я могу только сделать вывод, что каталог на втором снимке экрана отличается от того, который является текущим каталогом, когда вы запускали ls (снимок экрана три) и когда вы пытались запустить свою программу с помощью java (первый скриншот).

Теперь я не знаю, что вы показываете на втором снимке экрана. Это какое-то представление о файловой системе Windows, которая (каким-то образом) сопоставляется с вашим Linux? Или это каталог, который вы копируете в систему Linux?

В любом случае, скриншоты 1 и 3 являются окончательными. Они показывают файловую систему Linux с точки зрения Linux. И с этой точки зрения в каталоге /home/se/cs3421_emul нет файла Sample1_input.txt. Там вообще нет *.txt файлов.

Когда вы запускаете такую ​​команду java в системе Linux, JVM должна увидеть файл с именем Sample1_input.txt в каталоге /home/se/cs3421_emul. Если его нет, это вызовет FileNotFound исключение с сообщением, идентичным тому, которое вы получаете.

Вам нужно выяснить, почему файла Sample1_input.txt нет в выводе ls; то есть почему файла нет.

person Stephen C    schedule 22.09.2019

УБЕДИТЕСЬ, что вы пишете имя файла в точности так, как оно есть. Поскольку Linux чувствителен к регистру и, например, если у вас есть файл с именем "Sample", и вы пытаетесь открыть файл "sample", вы получите сообщение об ошибке.

Я думаю, у вас та же проблема, что и у этой проблемы. проверить это

person Reyhaneh Trb    schedule 22.09.2019
comment
Кажется, проблема не в этом. Как видно из третьего снимка экрана, файла на самом деле нет в этом каталоге. - person Federico klez Culloca; 22.09.2019