Получение FileNotFoundException в Ubuntu 18.04 с Java - PullRequest
0 голосов
/ 22 сентября 2019

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

И вот каталог, в котором четко отображается мой файл enter image description here

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

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

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

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();
         */
    }

}

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

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

  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?

В любом случае, скриншоты один и три являются окончательными.Они показывают файловую систему 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выход;то есть почему файл не там.

0 голосов
/ 22 сентября 2019

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

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

...