Java не может найти файл внезапно - PullRequest
0 голосов
/ 21 апреля 2020

screenshot

public class DailyReport {
    public static void main (String[] args){

        try {

            int c1 =0;
            int c2 =0;
            int c3 =0;
            int c4 =0;
            int c5 =0;
            int total =0;

            File file=new File ("InputSB.txt");
            Scanner in = new Scanner (file);
            int count=0;
            ArrayList <Person> per = new ArrayList <Person>();



            CaseList [] c = CaseList.values();
             System.out.println("---------Covid-19 Cases and Actions Required---------");
                for (CaseList casel: c){
                 System.out.printf("%-10s : %-30s%-10s%n" ,casel.toString(),  casel.getCaseBg(), casel.getCaseStatus());
             }

                System.out.println("");


                System.out.println("----------------COVID-19 CASE REPORT----------------");
                System.out.printf("%-5s%-10s%-8s%-20s%-15s", "CASE", "GENDER", "AGE", "BACKGROUND", "Status");
                System.out.println("");

                //ArrayList <Person> per = new ArrayList <Person> ();


            while (in.hasNext()) {
                String s= in.next();
                int fileage=in.nextInt();
                String filecase=in.next();      



                per.add(new Person (s,fileage));

                CaseList cases = Enum.valueOf(CaseList.class, filecase);


                System.out.printf("%-5d%-10s%-8s%-20s%-15s%\n", (count+1),per.get(count).getGender(),per.get(count).getAge()
                 ,cases.getCaseBg(), cases.getCaseStatus());


                 switch(cases){ //()

                    case CASE1: ++c1;
                            break;

                    case CASE2: ++c2;
                            break;

                    case CASE3: ++c3;
                            break;

                    case CASE4: ++c4;
                            break;

                    case CASE5: ++c5;
                            break;

                default: break;

            }

                count++;
            }
            in.close();

        System.out.println("\nTotal in Quarantine = " + (c1+c2));
        System.out.println("Total in ICU        = " + c3);
        System.out.println("Total Warded        = " + c4);
        System.out.println("Total Recovered     = " + c5);
        total = (c1+c2+c3+c4+c5);
        System.out.println("Total Cases = " +total);

        }
        catch(Exception e)
        {
            System.out.println("File is not found");
        }
    }
}
//this is what printstacktrace gets

java.util.UnknownFormatConversionException: Conversion = '
'
    at java.base/java.util.Formatter.checkText(Formatter.java:2732)
    at java.base/java.util.Formatter.parse(Formatter.java:2718)
    at java.base/java.util.Formatter.format(Formatter.java:2655)
    at java.base/java.io.PrintStream.format(PrintStream.java:1139)
    at java.base/java.io.PrintStream.printf(PrintStream.java:1035)
    at DailyReport.main(DailyReport.java:57)

//line57
System.out.printf("%-5d%-10s%-8s%-20s%-15s%\n", (count+1),per.get(count).getGender(),per.get(count).getAge()
                 ,cases.getCaseBg(), cases.getCaseStatus()); //line58

Используя всего лишь "input.txt", я могу, по крайней мере, запустить остальную часть своего кода. Используя что-либо еще, например, абсолютный путь к файлу, или folder / input.txt и другие, он дает мне второй результат, который не найден в непосредственном файле.

Мои java файлы и файл input.txt находится в той же папке.

Итак, я открыл файл java, где я читаю в файле .txt, и все идет хорошо, и все работает соответственно, пока я не переместлю мои файлы java и файл .txt ВСЕ от моего НАСТОЛЬНОГО ПАПКИ НА МОЙ НАСТОЛЬНЫЙ.

Внезапно он продолжает выдавать мне исключение не найденного файла. В моем коде не должно быть ничего плохого, так как он работал отлично, пока я не переместил все это в новую папку.

File file = new file ("input.txt");
Scanner in = new Scanner (file);

Дело в том, что с кодом не должно быть ничего плохого, поскольку он прекрасно работал, когда все было на моем рабочем столе. Но когда я переместил его в папку, все пошло под гору.

Может кто-нибудь сказать мне, если у них такая же проблема? Я использую macOS, так что, может быть, это что-то.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Проблема в этой строке:

System.out.printf("%-5d%-10s%-8s%-20s%-15s%\n", (count+1),per.get(count).getGender(),per.get(count).getAge()
             ,cases.getCaseBg(), cases.getCaseStatus());

Шаблон заканчивается на %\n, который не является известным шаблоном преобразования.

Если ваш план состоял в том, чтобы напечатать символ процента, за которым следует разрыв строки, в соответствии с javado c (см. Раздел «Конверсии»), вы должны удвоить его: %%

Измените вашу строку на:

System.out.printf("%-5d%-10s%-8s%-20s%-15s%%\n", (count+1),per.get(count).getGender(),per.get(count).getAge()
             ,cases.getCaseBg(), cases.getCaseStatus());

Редактировать (спасибо Марку):

Если вы намеревались напечатать разделитель строк, используйте %n вместо %\n.

System.out.printf("%-5d%-10s%-8s%-20s%-15s%n", (count+1),per.get(count).getGender(),per.get(count).getAge()
             ,cases.getCaseBg(), cases.getCaseStatus());
0 голосов
/ 21 апреля 2020

Попробуйте изменить путь на относительный путь:

File file = new File("../folder/file.txt");

«..» означает папку прецедента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...