Text files: write and read with Scanner · File teks: tulis dan baca dengan Scanner
Reading and writing text files
- A text file stores text that stays on disk after the program ends.
- To read a file in Java we use a
Scannerconnected to aFile. - To write a file we use a
PrintWriter. In this lesson each program writes a file, then reads it back. - Bonus lesson: the AP CSA exam does not test file input/output. Learn this for real programs — you will not be examined on it.
Membaca dan menulis file teks
- File teks menyimpan teks yang tetap tersimpan di disk setelah program berakhir.
- Untuk membaca file dalam Java, kami menggunakan
Scanneryang terhubung keFile. - Untuk menulis file, kami menggunakan
PrintWriter. Dalam pelajaran ini, setiap program menulis file, kemudian membacanya kembali. - Pelajaran tambahan: ujian AP CSA tidak menguji input/output file. Pelajari ini untuk program nyata — Anda tidak akan diujikan tentangnya.
Reading and writing a file · Membaca dan menulis file
A file is used in three steps: open it, read or write lines, then close it. · Sebuah file digunakan dalam tiga langkah: buka file tersebut, baca atau tulis baris-barisnya, kemudian tutup file tersebut.
The imports you need
- File tools live in two places, so we import both at the top.
import java.io.*;— forFile,PrintWriter, andIOException.import java.util.Scanner;— for theScannerreader.
Import yang Anda butuhkan
- Alat file berada di dua tempat, jadi kami mengimpor keduanya di bagian atas.
import java.io.*;— untukFile,PrintWriter, danIOException.import java.util.Scanner;— untuk pembacaScanner.
import java.io.*;
import java.util.Scanner;
Files can fail, so we say throws IOException
- Reading or writing a file can go wrong (the file may be missing).
- Java makes you handle this. The simplest way is to add
throws IOExceptiontomain. - This says "if a file error happens, let the program stop". That is fine for these tasks.
File bisa gagal, jadi kami mengatakan throws IOException
- Membaca atau menulis file bisa salah (file mungkin hilang).
- Java mengharuskan Anda menangani ini. Cara termudah adalah menambahkan
throws IOExceptionkemain. - Ini berarti "jika terjadi kesalahan file, biarkan program berhenti". Itu baik untuk tugas-tugas ini.
Writing a file with PrintWriter
new PrintWriter("data.txt")makes (or empties) a file calleddata.txt.- Use
writer.println(...)to write one line, just like printing to the screen. - Always call
writer.close()when you finish, so the text is saved.
Menulis file dengan PrintWriter
new PrintWriter("data.txt")membuat (atau mengosongkan) file bernamadata.txt.- Gunakan
writer.println(...)untuk menulis satu baris, sama seperti mencetak ke layar. - Selalu panggil
writer.close()saat Anda selesai, agar teks tersimpan.
import java.io.*;
public class WriteDemo {
public static void main(String[] args) throws IOException {
PrintWriter writer = new PrintWriter("data.txt");
writer.println(10);
writer.println(20);
writer.close(); // save the file
System.out.println("wrote data.txt");
}
}
Reading numbers with Scanner
new Scanner(new File("data.txt"))opens the file for reading.in.hasNextInt()istruewhile there is another whole number to read.in.nextInt()reads the next whole number. Callin.close()when done.
Membaca angka dengan Scanner
new Scanner(new File("data.txt"))membuka file untuk dibaca.in.hasNextInt()adalahtrueselama ada bilangan bulat lain untuk dibaca.in.nextInt()membaca bilangan bulat berikutnya. Panggilin.close()saat selesai.
import java.io.*;
import java.util.Scanner;
public class ReadNumbers {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new File("data.txt"));
int total = 0;
while (in.hasNextInt()) { // more numbers?
total = total + in.nextInt();
}
in.close();
System.out.println(total);
}
}
Reading whole lines
- Sometimes a line is text, not a number. Then read lines instead.
in.hasNextLine()istruewhile there is another line.in.nextLine()reads the whole next line as aString.
Membaca baris utuh
- Terkadang sebuah baris berisi teks, bukan angka. Maka bacalah baris alih-alih itu.
in.hasNextLine()adalahtrueselama ada baris lain.in.nextLine()membaca baris berikutnya secara utuh sebagaiString.
hasNext()(noIntorLine) checks for the next word, andnext()reads one word.- The pattern is always: check with a
hasNext...method, then read with the matching method.
import java.io.*;
import java.util.Scanner;
public class ReadLines {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new File("data.txt"));
while (in.hasNextLine()) {
String line = in.nextLine();
System.out.println("read: " + line);
}
in.close();
}
}
hasNext()(tanpaIntatauLine) memeriksa kata berikutnya, dannext()membaca satu kata.- Polanya selalu: periksa dengan metode
hasNext..., lalu baca dengan metode yang sesuai.
Write then read in one program
- In each task your program first writes a file, then reads the same file back.
- This means you can run it again and again and get the same result.
Menulis lalu membaca dalam satu program
- Dalam setiap tugas, program Anda pertama kali menulis file, lalu membaca file yang sama kembali.
- Ini berarti Anda dapat menjalankannya berulang kali dan mendapatkan hasil yang sama.
import java.io.*;
import java.util.Scanner;
public class RoundTrip {
public static void main(String[] args) throws IOException {
PrintWriter writer = new PrintWriter("data.txt");
writer.println(3);
writer.println(4);
writer.close();
Scanner in = new Scanner(new File("data.txt"));
int total = 0;
while (in.hasNextInt()) {
total = total + in.nextInt();
}
in.close();
System.out.println(total); // 7
}
}
Common mistakes
nextInt()leaves the newline, so a followingnextLine()reads an empty line.- Check
hasNext()before reading to avoid running off the end.
Kesalahan umum
nextInt()meninggalkan newline, sehingganextLine()berikutnya membaca baris kosong.- Periksa
hasNext()sebelum membaca untuk menghindari keluar dari batas.
Now you try
- Each task pre-fills a class. Write the file first, then read it back, as the prompt asks.
- Remember the
throws IOExceptiononmain, andclose()both the writer and theScanner. - Press Run to compile and run, then Check answer.
Sekarang Anda coba
- Setiap tugas mengisi kelas terlebih dahulu. Tulis file terlebih dahulu, lalu bacalah kembali, sesuai permintaan.
- Ingat
throws IOExceptionpadamain, danclose()baik penulis maupunScanner. - Tekan Jalankan untuk mengompilasi dan menjalankan, lalu Periksa jawaban.
First write the numbers 10, 20, 5, 7 to data.txt (one per line) with a PrintWriter. Then open it with new Scanner(new File("data.txt")) and use hasNextInt/nextInt to add them up. Print only the total. Expected output: 42. · Pertama tulis angka 10, 20, 5, 7 ke dalam data.txt (satu per baris) menggunakan PrintWriter. Kemudian buka file tersebut dengan new Scanner(new File("data.txt")) dan gunakan hasNextInt/nextInt untuk menjumlahkannya. Cetak hanya totalnya. Output yang diharapkan: 42.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
First write the lines apple, banana, cherry to words.txt with a PrintWriter. Then open it with a Scanner and use hasNextLine/nextLine to count the lines. Print only the count. Expected output: 3. · Pertama tulis baris-baris apple, banana, cherry ke dalam words.txt menggunakan PrintWriter. Kemudian buka file tersebut dengan Scanner dan gunakan hasNextLine/nextLine untuk menghitung jumlah barisnya. Cetak hanya jumlahnya. Output yang diharapkan: 3.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.