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