# फ़ाइल पढ़ना व लिखना — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-file-io

> आधुनिक java.nio.file API से फ़ाइल पढ़ें व लिखें, त्वरित लाइन-दर-लाइन पढ़ने के लिए Scanner का सहारा लें, और try-with-resources से हमेशा संसाधन बंद करें।

## java.io बनाम java.nio.file

पुराना `java.io` पैकेज (`FileReader`, `BufferedReader`) अब भी हर जगह काम करता है। Java 7 से, `java.nio.file` — `Path` व `Files` — अधिकतर रोज़मर्रा के फ़ाइल कामों के लिए एक बेहतर, आधुनिक API देता है और शुरुआत के लिए अनुशंसित है।

## Files से पढ़ना

छोटी-मध्यम फ़ाइलों के लिए `Files.readString` व `Files.readAllLines` एक-पंक्ति समाधान हैं। बड़ी फ़ाइलों के लिए सब कुछ मेमोरी में लाने की बजाय लाइनों को स्ट्रीम करें।

```java
Path path = Path.of("notes.txt");
String whole = Files.readString(path);
List<String> lines = Files.readAllLines(path);

try (var stream = Files.lines(path)) {
    stream.filter(l -> !l.isBlank()).forEach(System.out::println);
}
```

## लिखना व फ़ाइल के लिए Scanner

`Files.writeString` एक ही कॉल में फ़ाइल लिखता (या बनाता) है। `Scanner` सीधे `File` को भी लपेट सकता है — संरचित, टोकन-दर-टोकन इनपुट पढ़ने के लिए उतना ही आसान जितना कंसोल से।

```java
Files.writeString(Path.of("out.txt"), "hello\n", StandardOpenOption.CREATE, StandardOpenOption.APPEND);

try (Scanner sc = new Scanner(new File("scores.txt"))) {
    while (sc.hasNextInt()) {
        System.out.println(sc.nextInt());
    }
} catch (FileNotFoundException e) {
    throw new UncheckedIOException(e);
}
```

## हमेशा बंद करें, हमेशा IOException संभालें

फ़ाइल हैंडल एक सीमित OS संसाधन हैं — इन्हें हमेशा `try-with-resources` में खोलें। लगभग हर फ़ाइल ऑपरेशन **checked** `IOException` फेंकता है, इसलिए भूलने पर कम्पाइलर याद दिलाएगा।
