फाइल पढ़ते समय मुझे पूरा रास्ता क्यों डालना पड़ता है? [डुप्लिकेट]

Dec 17 2020

मैं जावा में नया हूं और C ++ पृष्ठभूमि से आता हूं। मैं वास्तव में फ़ाइल पढ़ने का परीक्षण करने के लिए एक सरल कोड बनाया। मेरे पास एक इनपुट फ़ाइल है, जिसे "input.txt" कहा जाता है और यह मेरी मुख्य फ़ाइल "Main.java" के समान फ़ाइल में है। हालाँकि, जब मैं "इनपुट। Txt" नाम का उपयोग करके किसी फ़ाइल ऑब्जेक्ट का नया उदाहरण बनाने का प्रयास करता हूं, तो वह फ़ाइल और फ़ाइल नहीं पाता है। जब मैंने इसके बजाय पूर्ण पथ का नाम रखा, तो यह फ़ाइल ढूंढता है। कोड नीचे प्रदर्शित किया गया है:

 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();

    }
}

क्या मैं यहां कुछ गलत कर रहा हूं क्योंकि मैं यह नहीं देखता कि मुझे पूर्ण पथ के बजाय सिर्फ फ़ाइल नाम दर्ज करने में सक्षम क्यों नहीं होना चाहिए। C ++ में, यदि फाइलें एक ही फ़ोल्डर में थीं, तो मैं केवल फ़ाइल नाम दर्ज कर सकता हूं इसलिए मैं उलझन में हूं कि यहां काम क्यों नहीं कर रहा है। नीचे मुझे मिलने वाला आउटपुट है:

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)

क्या कोई मुझे यह समझने में मदद कर सकता है कि क्या चल रहा है? किसी भी तरह की सहायता का स्वागत किया जाएगा।

जवाब

DuncG Dec 17 2020 at 23:14

आप यह देख सकते हैं कि पथ कहां पर स्थित है (जो सिस्टम प्रॉपर्टी "user.dir" में आयोजित dir होगा) निम्नानुसार है:

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