Mengapa Saya Harus Memasuki Path Lengkap Saat Membaca File? [duplikat]

Dec 17 2020

Saya baru mengenal Java dan berasal dari latar belakang C ++. Saya membuat kode yang sangat sederhana hanya untuk menguji pembacaan file. Saya memiliki file input bernama "input.txt" dan file yang sama dengan file utama saya bernama "Main.java". Namun, ketika saya mencoba membuat instance baru dari objek File menggunakan nama "input. Txt", ia tidak menemukan file dan file.exists () mengembalikan false. Ketika saya memasukkan nama path lengkap, ia menemukan file tersebut. Kode ditampilkan di bawah ini:

 public static void main(String[] args) throws FileNotFoundException
    {
    //  File file = new File("C:/Users/josep/OneDrive/Documents/java/input.txt"); //This works
        File file = new File("input.txt"); //why won't this work?

        if( file.exists() )
        {
            System.out.println("File exists");
        }
        else
        {
            System.out.println("Doesn't exist"); //this prints out.
        }

        Scanner input = new Scanner(file);

        String str = input.nextLine();
        System.out.println("Str: " + str);

        input.close();

    }
}

Apakah saya melakukan sesuatu yang salah di sini karena saya tidak mengerti mengapa saya tidak dapat memasukkan nama file saja alih-alih path lengkapnya. Di C ++, jika file berada di folder yang sama saya bisa memasukkan nama file jadi saya bingung mengapa itu tidak berfungsi di sini. Di bawah ini adalah output yang saya dapatkan:

Doesn't exist
Exception in thread "main" java.io.FileNotFoundException: input.txt (The system cannot find the file specified)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:211)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:153)
        at java.base/java.util.Scanner.<init>(Scanner.java:639)
        at Main.main(Main.java:22)

Adakah yang bisa membantu saya memahami apa yang sedang terjadi? Bantuan apa pun akan sangat dihargai.

Jawaban

DuncG Dec 17 2020 at 23:14

Anda dapat melihat di mana jalur memutuskan (yang akan menjadi direktori yang disimpan di properti Sistem "user.dir") sebagai berikut:

System.out.println(Path.of("index.txt").toRealPath());