Skip to content

Input and Output

Info

Semua file yang ada pada contoh pada catatan ini ada pada package Ch3/J3_7_InputOutput

Reading Input

Membaca dari "standard input stream" Syste,.in cukup mudah. Untuk membaca console input kita harus membuat inisasi dari class Scanner yang diberi dengan nilai System.in

Code

package Ch3.J3_7_InputOutput;

import java.util.Scanner;

public class J_1_Scanner_sysin {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Whats is your name ? ");
        String name = scanner.nextLine();
        System.out.print("Your ages ? ");
        int age = scanner.nextInt();
        System.out.println(String.format("Name is %s with age %d",name,age));
    }
}
Output
Whats is your name ? Muhammad Farras Ma'ruf
Your ages ? 27
Name is Muhammad Farras Ma'ruf with age 27

Info

Class Scanner tidak cocok untuk membaca sebuah passwod dari console karena nilai masukan akan tampil dilayar. Maka dari itu anda dapat menggunakan class Console.

Code

package Ch3.J3_7_InputOutput;
import java.io.Console;

public class J_2_Console {
    public static void main(String[] args) {
        Console cs = System.console();
        System.out.println(cs);
        String userName = cs.readLine("Type username : ");
        char[] password = cs.readPassword("Type password : ");

        System.out.println(String.format("Username %d dengan password %d",
                userName,password.toString()));
    }
}

Formating output

Kita dapat mengatur format dari sebuah nilai yang dihasilkan oleh Java. Ada 3 acara; 1. Jika anda ingin meng-print formated value ke console gunakan System.out.printf 2. ALternatif lain, tanpa harus langsung menampilkan di console dapat menggunakan static method String.format(). 3. Mulai dari java 15, anda dapat menggunakan method formetted 4. Anda juga dapat menggunakan method formatted pada (text block)[01. Strings/#text-blocks]

Code

package Ch3.J3_7_InputOutput;

public class J_3_format_output_printf {
    public static void main(String[] args) {
        String product = "Laptop";
        double price = 14700000d;
        double discount = .271295;

        System.out.printf("Produk : %s\n" +
                "Harga : %,.0f\n" +
                "Price after discount : %,.2f\n",product,price,(price*(1-discount)));
    }
}
Output
Produk : Laptop
Harga : 14,700,000
Price after discount : 10,711,963.50
package Ch3.J3_7_InputOutput;

public class J_3_format_output_StringFormat {
    public static void main(String[] args) {
        String product = "Laptop";
        double price = 14700000d;
        double discount = .271295;
        String value = String.format("Produk : %s\n" +
                "Harga : %,.0f\n" +
                "Price after discount : %,.2f\n",product,price,(price*(1-discount)));
        System.out.printf(value);
    }
}
Output
Produk : Laptop
Harga : 14,700,000
Price after discount : 10,711,963.50
package Ch3.J3_7_InputOutput;

public class J_3_format_output_formatted {
    public static void main(String[] args) {
        String product = "Laptop";
        double price = 14700000d;
        double discount = .271295;

        String value2 = ("Produk : %s \n" +
                "Harga : %,.0f \n" +
                "Price after discount : %,.2f\n").formatted(product,price,(price*(1-discount)));
        System.out.println(value2);
    }
}
Output
Produk : Laptop
Harga : 14,700,000
Price after discount : 10,711,963.50
package Ch3.J3_7_InputOutput;

public class J_3_format_output_textblock {
    public static void main(String[] args) {
        String product = "Laptop";
        double price = 14700000d;
        double discount = .271295;

        String value2 = ("""
                "Produk : %s
                "Harga : %,.0f
                "Price after discount : %,.2f""").formatted(product,price,(price*(1-discount)));
        System.out.println(value2);
    }
}
Output
Produk : Laptop
Harga : 14,700,000
Price after discount : 10,711,963.50

Dibawah ini adalah daftar convertion characters yang dapat digunakan untuk memformat value;

Convertion Characters Type Example
d Decimal Integer 159
x atau X Hexadecimal integer gf
o Octal integer 237
f atau F Fixed-point Floating-point 15.9
e atau E Exponential floating-point 159.e+01
g atau G General floating-point _
a atau A Hexadecimal floating-point 0x1.fccdp3
s atau S String Hello
c atau C Character H
b atau B Boolean true
h atau H Hash code 42625b2
tx Legacy date and time _
% Percent symbol %
n Line seperator _

Kita juga dapat menggunakan flags. Sebenarnya kita sudah menggunakan pada contoh diatas, dimana kita menggunakan seperator (,) dam decimal point (.). Untuk lebih memahami lagi, contoh dibawah ini saya akan menggunakan flags, comma (,), titik (.) dan parenthis (() agar format yang ditampilkan memenuhi kriteria berikut; 1. Seperator satuan 2. Tanda desimal diiku dengan dua angka saja 3. Untuk negatif value diberi tanda kurung

Code

package Ch3.J3_7_InputOutput;

public class J_3_format_output_using_flags {
    public static void main(String[] args) {
        float negNumber = (-400000/3);
        float posNumber = (20000/2);

        System.out.printf("""
                This is negative number : %,(.2f
                This is positive number : %,(.2f
                """, negNumber, posNumber);
    }
}
Output
This is negative number : (133,333.00)
This is positive number : 10,000.00

Dibawah ini adalah daftar flags dan fungsinya

Flag Purpose
+ Memberikan tanda + dan - pada angka
Space Memberikan space untuk positive number
0 Menambah awalan zero
. Left-justifies field
( Memberikan angka positif tanda kurung
, Memberikan seperator pada satuan
# (for f format) -
# (for x format) -
$ -
< -

Note

Formating mengikuti locale-specific komputer anda. Contohnya, bisa jadi seperator satuan dikomputer anda adalah . dan decimal pointnya adalah koma. Mungkin di mesin yang lain justru sebaliknya. InsyaAllah akan ada catatan tentang bagaimana mengatur international behavior pada aplikasi yang kita buat.

FIle input and output

Dibawahini adalah nilai keluaran dari perintah tree untuk melihat struktur folder dari kode yang kita gunakan pada catatan ini.

src/main
├── java
│   ├── Ch3
│   │   ├── J3_6_Strings
│   │   └── J3_7_InputOutput
│   │       └── J_4_file_input_output_read_file.java
│   └── Main.java
└── resources
    └── MyFile.txt

Untuk membaca file menggunakan Scanner pada file yang berada pada folder khusus resource kita dapat menggunakan instance dari class Scanner.

Code

package Ch3.J3_7_InputOutput;

import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Path;
import java.util.Objects;
import java.util.Scanner;

public class J_4_file_input_output_read_file {
    public static void main(String[] args) throws URISyntaxException, IOException {

        // Mengambil URL dari folder Resources
        URL url = Objects.requireNonNull(J_4_file_input_output_read_file.
                        class.getClassLoader().
                        getResource("MyFile.txt"),
                "URL tidak boleh kosong mas bor");

        // Membuat objek path, Scanner membutuhkan nilai dengan objek Path
        Path lokasiFile = Path.of(url.toURI());

        Scanner scanner = new Scanner(lokasiFile);
        // Reading file using while loop
        while (scanner.hasNextLine()){
            String line = scanner.nextLine();
            System.out.println(line);
        }
    }
}
Output
Bismillah, dengan menyebut nama Allah.

Info

Terkait dengan penggunaan class Path, ada cara lain yaitu menggunakan File dari java.io.File. Namun penggunaan File sudah digantikan dengan API terbaru, yaitu java.nio.Path. Untuk mengetahui lebih lanjut perbedaan dari toosl tersebut anda dapat menbaca disini Java Path Vs Java File