FileURI uri Khi bạn có đối tượng File, thì có các phương thức sau giúp bạn thao tác các file trong Java: STT Phương thức và Miêu tả 1 public String getName Trả về tên của file hoặc thư
Trang 1ĐẠI HỌC KINH DOANH VÀ CÔNG NGHỆ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
GIÁO TRÌNH CÔNG NGHỆ JAVA Chủ biên : TS Hoàng Xuân Thảo
Biên soạn: TS Hoàng Xuân Thảo
ThS Phạm Nguyên Văn
(Dùng cho chương trình đào tạo hệ đại học)
Lưu hành nội bộ
HÀ NỘI - 2016
Trang 2MỤC LỤC
Chương 1: I/O và File
1 Lý thuyết:
1.1 Một số cách thức vào/ra file với java.io
1.1.1 Ghi dạng byte: File, FileInputStream, FileOutputStream1.1.2 Ghi dạng text: FileReader, FileWriter
1.3 JButton, JLabel, JTextField, JTextArea
1.4 JCheckbox, JRadioButton, JPasswordFiled
1.5 JScrollPane, JOptionPane, JDialog
1.6 Layout: FlowLayout, BorderLayout, GridLayout
1.2 HashSet (trong Set interface)
1.3 LinkedList (trong List interface)
Trang 31.4 PriorityQueue (trong Queue interface)
2 Kiểm tra lần 1
Chương 5 : Kết nối database
1 Lý thuyết:
1.1 Lập trình JDBC:
1.2 Tạo kết nối tới 1 cơ sở dữ liệu (ví dụ Access )
1.3 Truy xuất dữ liệu, tạo, chèn, xoá: Statement, ResultSet
2 Thực hành:
Chương 6: Ôn tập
1 Bài tập java cơ bản
2 Bài tập java nâng cao
Trang 4Chương 1: I/O và File
1 Lý thuyết:
1.1 Một số cách thức vào/ra file với java.io
Gói java.io chứa gần như tất cả các lớp bạn cần để thực hiện input và output
(I/O) trong Java Tất cả những stream này biểu diễn một nguồn input và mộtđích đến output Stream trong java.io package hỗ trợ nhiều như liệu như cáckiểu gốc, Object, các ký tự nội bộ, …
Một stream có thể được định nghĩa như là một dãy liên tục dữ liệu
InputStreamđược sử dụng để đọc dữ liệu từ một nguồn
và OutputStream được sử dụng để ghi dữ liệu tới một đích đến.
Java cung cấp sự hỗ trợ mạnh mẽ nhưng linh hoạt cho I/O liên quan tới cácFile và các mạng nhưng trong phần hướng dẫn này, chúng tôi chỉ bàn luậntính năng cơ bản liên quan tới các stream và I/O Chúng ta sẽ xem xét từng
ví dụ được sử dụng phổ biến nhất
Byte Stream trong Java
Byte Stream trong Java được sử dụng để thực hiện input và output của cácbyte (8 bit) Mặc dù có nhiều lớp liên quan tới byte stream nhưng các lớp
thường được sử dụng nhất là: FileInputStream và FileOutputStream Sau
đây là một ví dụ sử dụng hai lớp này để sao chép một input file vào trongmột output file:
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException
{
FileInputStream in = null;
FileOutputStream out = null;
try {
Trang 5Bây giờ giả sử chúng ta có một file là input.txt có nội dung sau:
Day la vi du ve sao chep file
Trong bước tiếp theo, biên dịch chương trình trên và thực thi nó, sẽ cho kết
quả là tạo một file là output.txt có cùng nội dung như chúng ta có trong
input.txt Vì thế, bạn đặt code trên vào trong CopyFile.java file và làm nhưsau:
$javac CopyFile.java
$java CopyFile
Character Stream trong Java
Byte Stream trong Java được sử dụng để thực hiện input và output của các
byte (8 bit), trong khi đó, Character Stream trong Java được sử dụng để
Trang 6thực hiện input và output cho Unicode 16 bit Mặc dù có nhiều lớp liên quan
tới character stream nhưng các lớp thường dùng nhất là FileReader và
FileWriter… Mặc dù trong nội tại, FileReader sử dụng FileInputStream và
FileWriter sử dụng FileOutputStream, nhưng có một điểm khác biệt lớn ởđây là FileReader đọc hai byte cùng một thời điểm và FileWriter ghi 2 bytecùng một lúc
Chúng ta có thể viết lại ví dụ trên mà sử dụng hai lớp này để sao chép mộtinput file (có các ký tự Unicode) vào trong một output file
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException
Trang 7}
}
}
Giả sử chúng ta có input.txt có nội dung sau:
Day la vi du ve sao chep file
Trong bước tiếp theo, biên dịch chương trình trên và thực thi nó, sẽ cho kếtquả là tạo một file là output.txt có cùng nội dung như chúng ta có tronginput.txt Vì thế, bạn đặt code trên vào trong CopyFile.java file và làm nhưsau:
$javac CopyFile.java
$java CopyFile
Standard Stream trong Java
Tất cả các Ngôn ngữ lập trình cung cấp sự hỗ trợ cho I/O chuẩn, tại đâychương trình của người sử dụng có thể nhận đầu vào từ một bàn phím và sau
đó tạo kết quả trên màn hình máy tính Nếu bạn đã biết về các ngôn ngữC/C++, thì bạn phải biết về 3 thiết bị chuẩn là STDIN, STDOUT, vàSTDERR Theo cách tương tự, Java cung cấp 3 Standard Stream sau:
Đầu vào chuẩn (Standard Input): Nó được sử dụng để truyền dữ liệu
tới chương trình của người dùng và thường thì một bàn phím được sử
dụng như là đầu vào chuẩn và được biểu diễn như System.in.
Đầu ra chuẩn (Standard Output): Nó được sử dụng để hiển thị kết quả
đầu ra từ chương trình của người dùng và thường thì một màn hình máytính được sử dụng như là đầu ra chuẩn và được biểu diễn như là
System.out.
Lỗi chuẩn (Standard Error): Được sử dụng để hiển thị các lỗi trong
chương trình của người dùng và thường thì một màn hình máy tính được
sử dụng như là lỗi chuẩn và được biểu diễn như là System.err.
Sau đây là một chương trình đơn giản tạo InputStreamReader để đọc
luồng đầu vào chuẩn tới khi người sử dụng gõ một "q"
import java.io.*;
Trang 8public class ReadConsole {
public static void main(String args[]) throws IOException
{
InputStreamReader cin = null;
try {
cin = new InputStreamReader(System.in);
System.out.println("Nhap cac ky tu, 'q' de thoat.");
Trang 9e
q
q
Đọc và Ghi File trong Java
Như đã miêu tả trước đó, một Stream có thể được định nghĩa như là một dãy
liên tục của dữ liệu InputStream được sử dụng để đọc dữ liệu từ một nguồn vàOutputStream được sử dụng để ghi dữ liệu tới một đích.
Dưới đây là một cấu trúc có thứ tự của các lớp để xử lý các luồng Input và Output
1.1.1 Ghi dạng byte: File, FileInputStream,
FileOutputStream File
Lớp File trong Java biểu diễn các pathname của các file và thư mục theo
phương thức trừu tượng Lớp này được sử dụng để tạo các file và thư mục,
để tìm kiếm các file, xóa các file, …
Đối tượng File biểu diễn file/thư mục thực sự trên đĩa Có các constructorsau để tạo một đối tượng File trong Java:
Cú pháp sau tạo một đối tượng File mới từ một pathname trừu tượng cha vàmột chuỗi pathname con
Trang 10File(File parent, String child);
Cú pháp sau tạo một đối tượng File mới bởi việc biến đổi chuỗi pathname
đã cho thành một pathname trừu tượng
File(String pathname)
Cú pháp sau tạo một đối tượng File mới từ một chuỗi pathname cha và một chuỗi pathname con
File(String parent, String child)
Cú pháp sau tạo một đối tượng File mới bởi việc biến đổi URI đã cho thành một pathname trừu tượng
File(URI uri)
Khi bạn có đối tượng File, thì có các phương thức sau giúp bạn thao tác các
file trong Java:
STT Phương thức và Miêu tả
1 public String getName()
Trả về tên của file hoặc thư mục đã được biểu thị bởi pathnametrừu tượng này
2 public String getParent()
Trả về chuỗi pathname của pathname trừu tượng cha, hoặc nullnếu pathname này không là tên của một thư mục cha
3 public File getParentFile()
Trả về pathname trừu tượng của pathname trừu tượng cha, hoặcnull nếu pathname này không là tên của một thư mục cha
4 public String getPath()
Biến đổi pathname trừu tượng này thành một chuỗi pathname
Trang 115 public boolean isAbsolute()
Kiểm tra có hay không pathname trừu tượng này là absolute Trả
về true nếu là absolute, nếu không là false
6 public String getAbsolutePath()
Trả về chuỗi pathname tuyệt đối của pathname trừu tượng này
7 public boolean canRead()
Kiểm tra có hay không ứng dụng có thể đọc file, được biểu thị bởipathname trừu tượng này Trả về true nếu và chỉ nếu file đã xácđịnh bởi pathname trừu tượng này là tồn tại và có thể được đọc từứng dụng; nếu không là false
8 public boolean canWrite()
Kiểm tra có hay không ứng dụng có thể sửa đổi file, được biểu thịbởi pathname trừu tượng này Trả về true nếu và chỉ nếu hệ thốngfile thực sự chứa một file được biểu thị bằng pathname trừu tượngnày và ứng dụng được phép write tới file đó; nếu không là false
9 public boolean exists()
Kiểm tra có hay không file hoặc thư mục được biểu thị bởipathname trừu tượng này là tồn tại Trả về true nếu và chỉ nếu filehoặc thư mục được biểu thị bởi pathname trừu tượng này là tồntại; nếu không là false
10 public boolean isDirectory()
Kiểm tra có hay không file được biểu thị bởi pathname trừu tượngnày là một thư mục Trả về true nếu và chỉ nếu file được biểu thịbởi pathname trừu tượng này là tồn tại và là một thư mục; nếukhông là false
11 public boolean isFile()
Kiểm tra có hay không file được biểu thị bởi pathname trừu tượngnày là một normal file Một file là normal nếu nó không là một thưmục và ngoài ra, thỏa mãn các tiêu chuẩn khác phụ thuộc vào hệthống Bất kỳ một non-directory file được tạo bởi một ứng dụng
Trang 12Java được bảo đảm là một normal file Trả về true nếu và chỉ nếufile được biểu thị bởi pathname trừu tượng này là một normal file;nếu không là false
12 public long lastModified()
Trả về time mà file được biểu thị bởi pathname trừu tượng nàyđược sửa đổi lần cuối cùng Trả về giá trị long biểu diễn thời gian
mà file được sửa đổi lần cuối cùng, được tính toán bằng mili giây
từ 00:00:00 GMT, 1/1/1970, hoặc 0L nếu file không tồn tại hoặcnếu một I/O error xuất hiện
13 public long length()
Trả về độ dài của file được biểu thị bởi pathname trừu tượng này.Giá trị trả về là không rõ ràng nếu pathname này biểu thị một thưmục
14 public boolean createNewFile() throws IOException
Tạo một file mới, trống với tên pathname trừu tượng này nếu vàchỉ nếu một file với tên này chưa tồn tại Trả về true nếu và chỉnếu file với tên này không tồn tại và được tạo thành công; nếu filevới tên này đã tồn tại, thì trả về false
15 public boolean delete()
Xóa file hoặc thư mục được biểu thị bởi pathname trừu tượng này.Nếu pathname này biểu thị một thư mục, thì thư mục phải là trống
để bị xóa Trả về true nếu và chỉ nếu file hoặc thư mục bị xóathành công; nếu không là false
16 public void deleteOnExit()
Yêu cầu rằng file hoặc thư mục được biểu thị bởi pathname trừutượng này để bị xóa khi thiết bị ảo kết thúc
17 public String[] list()
Trả về một mảng các chuỗi chỉ các file và thư mục trong thư mục
Trang 13được biểu thị bởi pathname trừu tượng này
18 public String[] list(FilenameFilter filter)
Trả về một mảng các chuỗi chỉ các file và thư mục trong thư mụcđược biểu thị bởi pathname trừu tượng này mà thỏa mãn filter đãcho
20 public File[] listFiles()
Trả về một mảng các pathname trừu tượng biểu thị các file trongthư mục được biểu thị bởi pathname trừu tượng này
21 public File[] listFiles(FileFilter filter)
Trả về một mảng các pathname trừu tượng biểu thị các file và thưmục trong thư mục được biểu thị bởi pathname trừu tượng này màthỏa mãn filter đã cho
22 public boolean mkdir()
Tạo thư mục được chỉ bởi pathname trừu tượng này Trả về truenếu và chỉ nếu thư mục được tạo; nếu không là false
23 public boolean mkdirs()
Tạo thư mục được chỉ bởi pathname trừu tượng này, bao gồm bất
kỳ thư mục cha nào cần thiết nhưng không tồn tại Trả về true nếu
và chỉ nếu thư mục được tạo, cùng với tất cả thư mục cha cầnthiết; nếu không là false
24 public boolean renameTo(File dest)
Đổi tên file được biểu thị bởi pathname trừu tượng này Trả vềtrue nếu và chỉ nếu việc đổi tên thành công; nếu không là false
25 public boolean setLastModified(long time)
Thiết lập thời gian chỉnh sửa cuối cùng của file hoặc thư mụcđược chỉ bởi pathname trừu tượng này Trả về true nếu và chỉ nếuhoạt động này thành công; nếu không là false
Trang 1426 public boolean setReadOnly()
Đánh dấu file hoặc thư mục được chỉ bởi pathname trừu tượngnày để mà các hoạt động read-only được cho phép Trả về true nếuhoạt động này thành công; nếu không là false
27 public static File createTempFile(String prefix, String suffix,
File directory) throws IOException
Tạo một file trống trong thư mục đã cho, bởi sử dụng các chuỗitiền tố và hậu tố đã cung cấp để tạo tên của nó Trả về pathnametrừu tượng biểu thị một file trống mới được tạo
28 public static File createTempFile(String prefix, String suffix)
throws IOException
Tạo một file trống trong thư mục temporary-file, bởi sử dụng tiền
tố và hậu tố đã cung cấp để tạo tên của nó Triệu hồi phương thứcnày tương đương với gọi phương thức createTempFile(prefix,suffix, null) Trả về pathname trừu tượng biểu thị một file trốngmới được tạo
29 public int compareTo(File pathname)
So sánh 2 pathname trừu tượng theo từ điển Trả về 0 nếu tham số
là cân bằng với pathname trừu tượng này, một giá trị nhỏ hơn 0nếu pathname trừu tượng này nhỏ hơn tham số theo từ điển, hoặcmột giá trị lớn hơn 0 nếu pathname trừu tượng này lớn hơn tham
số theo từ điển
30 public int compareTo(Object o)
So sánh pathname trừu tượng này với đối tượng khác Trả về 0nếu tham số là cân bằng với pathname trừu tượng này, một giá trịnhỏ hơn 0 nếu pathname trừu tượng nhỏ hơn tham số theo từ điển,hoặc một giá trị lớn hơn 0 nếu pathname trừu tượng này lớn hơntham số theo từ điển
31 public boolean equals(Object obj)
Kiểm tra pathname trừu tượng này có cân bằng với đối tượng đãcung cấp không Trả về true nếu và chỉ nếu tham số là không null
Trang 15và là một pathname trừu tượng mà biểu thị file hoặc thư mục giống như với pathname trừu tượng này
32 public String toString()
Trả về chuỗi pathname của pathname trừu tượng này Đây là chuỗi được trả về bởi phương thức getPath()
Ví dụ
Sau đây là ví dụ minh họa đối tượng File trong Java:
package com.tutorialspoint;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
/ true neu file la executable
boolean bool = f.canExecute();
// tim absolute path
Trang 16test1.txt la executable: true
test2.txt la executable: false
FileInputStream
Luồng này được sử dụng để đọc dữ liệu từ các file Các đối tượng có thểđược tạo bởi sử dụng từ khóa new và có một số kiểu constructor có sẵn.Constructor sau đây nhận tên file như là một chuỗi để tạo một đối tượngInput Stream để đọc file:
InputStream f = new FileInputStream("C:/java/hello");
Constructor sau nhận một đối tượng File để tạo một đối tượng Input Stream
để đọc file Đầu tiên chúng ta tạo một đối tượng file bởi sử dụng phươngthức File() như sau:
Trang 17File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
Khi chúng ta có đối tượng InputStream, thì khi đó có một danh sách các
phương thức có thể được sử dụng để đọc stream hoặc để thực hiện hoạtđộng nào khác trên stream này
STT Phương thức và Miêu tả
1 public void close() throws IOException{}
Phương thức này đóng output stream Giải phóng bất kỳ nguồn hệthống nào liên kết với file Ném một IOException
2 protected void finalize()throws IOException {}
Phương thức này xóa sự kết nối tới File đó Bảo đảm rằng phươngthức close của output stream này được gọi khi không có thamchiếu nào nữa tới stream này Ném một IOException
3 public int read(int r)throws IOException{}
Phương thức này đọc byte dữ liệu đã xác định từ InputStream Trả
về một int Trả về byte dữ liệu tiếp theo và -1 sẽ được trả về nếukết thúc file
4 public int read(byte[] r) throws IOException{}
Phương thức này đọc r byte từ input stream vào trong một mảng.Trả về tổng số byte đã đọc Nếu kết thúc file, -1 được trả về
5 public int available() throws IOException{}
Cung cấp số byte mà được đọc từ input stream này Trả về một int
Có một số input stream quan trọng khác có sẵn, để biết thêm chi tiết, bạn tham khảo theo link sau:
ByteArrayInputStream
DataInputStream
Trang 18FileOutputStream được sử dụng để tạo một file và ghi dữ liệu vào trong nó.Luồng này sẽ tạo một file, nếu nó đã không tồn tại, trước khi mở nó để ghioutput
Dưới đây là hai constructor mà có thể được sử dụng để tạo một đối tượngFileOutputStream trong Java
Constructor sau nhận một tên file như là một chuỗi để tạo một đối tượnginput stream để ghi file
OutputStream f = new FileOutputStream("C:/java/hello")
Constructor sau nhận một đối tượng file để tạo một đối tượng output stream
để ghi file
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
Khi bạn có đối tượng OutputStream này, thì sau đây có các phương thức
có thể được sử dụng để ghi stream hoặc để thực hiện các hoạt động kháctrên stream này:
STT Phương thức và Miêu tả
1 public void close() throws IOException{}
Phương thức này đóng output stream Giải phóng bất kỳ nguồn
hệ thống nào liên kết với file Ném một IOException
2 protected void finalize()throws IOException {}
Phương thức này xóa sự kết nối tới File đó Bảo đảm rằngphương thức close của output stream này được gọi khi không
có tham chiếu nào nữa tới stream này Ném một IOException
3 public void write(int w)throws IOException{}
Phương thức này ghi byte đã xác định tới output stream
Trang 194 public void write(byte[] w)
Ghi w byte từ mảng byte đã đề cập tới OutputStream
Ngoài ra cũng có một số output stream quan trọng khác, bạn tham khảo theolink sau:
public class fileStreamTest{
public static void main(String args[]){
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for(int i=0; i< size; i++)
{ System.out.print((char)is.read() + "
");
}
Trang 20Lớp này có một số constructor để tạo các đối tượng cần thiết.
Cú pháp sau tạo một FileReader mới trong Java, được cung cấp File để đọc
Khi bạn có đối tượng FileReader, thì có một số phương thức sau giúp bạn
có thể thao tác các file này
STT Phương thức và Miêu tả
1 public int read() throws IOException
Đọc một ký tự đơn Trả về một int, mà biểu diễn ký tự đã đọc
2 public int read(char [] c, int offset, int len)
Đọc các ký tự bên trong một mảng Trả về số ký tự đã đọc
Trang 21Ví dụ
Sau đây là ví dụ minh họa lớp FileReader trong Java:
import java.io.*;public class FileRead{ public static void main(String
args[] )throws IOException{ File file = new File("Hello1.txt");
/ tao file
file.createNewFile();
/ tao mot doi tuong FileWriter FileWriter
writer = new FileWriter(file);
/ ghi noi dung vao file
writer.write("Day\n la\n mot\n vi\n du\n");
writer.flush();
writer.close(); //Tao mot doi tuong FileReader
FileReader fr = new FileReader(file); char [] a =
Lớp FileWriter có một số constructor để tạo các đối tượng cần thiết
Cú pháp sau tạo một đối tượng FileWriter được cung cấp một đối tượngFile
FileWriter(File file)
Cú pháp sau tạo một đối tượng FileWriter được cung cấp một đối tượng Filevới một Boolean chỉ dẫn có hay không phụ thêm dữ liệu đã ghi
FileWriter(File file, boolean append)
Cú pháp sau tạo một đối tượng FileWriter mà liên kết với một FileDescriptor
Trang 22FileWriter(String fileName, boolean append)
Khi bạn có đối tượng FileWriter, thì có một số phương thức có thể được sử
dụng để thao tác các file này
STT Phương thức và Miêu tả
1 public void write(int c) throws IOException
Ghi một ký tự đơn
2 public void write(char [] c, int offset, int len)
Ghi một phần của mảng các ký tự bắt đầu từ offset và với độ dài
len
3 public void write(String s, int offset, int len)
Ghi một phần của String bắt đầu từ offset và với độ dài len
Ví dụ: Sau đây là ví dụ minh họa lớp FileWriter trong Java:
import java.io.*;
public class FileRead{
public static void main(String args[])throws IOException{
File file = new File("Hello1.txt");
/ tao file
file.createNewFile();
/ Tao mot doi tuong FileWriter
FileWriter writer = new FileWriter(file);
/ ghi noi dung vao file
writer.write("Day\n la\n mot\n vi\n du\n");
writer.flush();
writer.close();
Trang 23//Tao mot doi tuong FileReader
FileReader fr = new FileReader(file);
char [] a = new char[50];
fr.read(a); // doc noi dung toi mang
Như đã miêu tả trước đó, một Stream có thể được định nghĩa như là một dãy
liên tục của dữ liệu InputStream được sử dụng để đọc dữ liệu từ một nguồn vàOutputStream được sử dụng để ghi dữ liệu tới một đích
Dưới đây là một cấu trúc có thứ tự của các lớp để xử lý các luồng Input và Output
1.2.1 BufferReader
Trang 24Lớp BufferedReader trong java được sử dụng để đọc văn bản từ một input
stream dựa trên các ký tự (character stream) Nó có thể được sử dụng để đọc
dữ liệu theo dòng (line by line) bằng phương thức readLine() Nó giúp hiệusuất nhanh Nó kế thừa lớp Reader
Khai báo của lớp BufferedReader
Dưới đây là khi báo của lớp Java.io.BufferedReader:
public class BufferedReader extends Reader
BufferedReader(Reader rd) Nó được sử dụng để tạo ra thể hiện của
BufferedReader mà sử dụng kích thước mặcđịnh cho một bộ đệm đầu vào
BufferedReader(Reader rd, Nó được sử dụng để tạo ra thể hiện của
định cho một bộ đệm đầu vào
int read(char[] cbuf, int Nó được sử dụng để đọc các ký tự thành một
boolean markSupported() Nó được sử dụng để kiểm tra input stream có hỗ
trợ các phương thức mark() và reset() không
stream đã sẵn sàng để được đọc
đánh dấu lần cuối được gọi vào input streamnày
Trang 25void mark(int Nó được sử dụng để đánh dấu vị trí hiện tại
tài nguyên hệ thống nào liên kết đến stream
Ví dụ về đọc file trong java với lớp BufferedReader
Trong ví dụ này, chúng ta đọc dữ liệu từ file văn bản testout.txt sử dụng lớp
Java BufferedReader
import java.io.BufferedReader;
import java.io.FileReader;
public class BufferedReaderExample {
public static void main(String args[]) throws Exception {
FileReader fr = new FileReader("D:\\testout.txt");
BufferedReader br = new BufferedReader(fr);
Trang 26Lớp PrintWriter trong java là bản cài đặt của lớp Writer Nó được sử dụng
để ghi các định dạng đại diện của các đối tượng vào stream hướng văn bản
Khai báo của lớp PrintWriter
Dưới đây là khi báo của lớp Java.io.PrintWriter:
public class PrintWriter extends Writer
Các phương thức của lớp PrintWriter
ch)
ch, int start, int end)
PrintWriter format(String Nó được sử dụng để viết một chuỗi định dạng
chỉ định và định dạng chuỗi
Trang 27void flush() Nó được sử dụng để xả stream.
Ví dụ về ghi file trong java với lớp PrintWriter
Hãy xem ví dụ đơn giản để ghi dữ liệu trên console và trong file văn bản
testout.txt sử dụng lớp Java PrintWriter.
import java.io.File;
import java.io.PrintWriter;
public class PrintWriterExample {
public static void main(String[] args) throws Exception {
// Dữ liệu được ghi trên Console sử dụng lớp PrintWriter
PrintWriter writer = new PrintWriter(System.out);
writer.write("VietTuts.Vn: ");
writer.flush();
writer.close();
/ Dữ liệu được ghi vào File sử dụng PrintWriter
PrintWriter writer1 = null;
writer1 = new PrintWriter(new File("D:\\testout.txt"));
writer1.write("Java, Spring, Hibernate, Android, PHP, ");
Trang 28Serialization là một khái niệm giúp chúng ta có thể chuyển đổi trạng thái củamột Java object thành một định dạng nào đó để Java object này có thể đượclưu trữ ở đâu đó và sau đó, nó sẽ được sử dụng bởi một tiến trình khác.
Thông thường, khi sử dụng Serialization, Java object của chúng ta sẽ đượcchuyển đổi qua byte streams và chúng ta có thể lưu byte stream này trong bộnhớ, trên ổ đĩa, truyền qua mạng đến một server nào đó hoặc cũng có thể lưuchúng vào database
Và khi một tiến trình khác sử dụng một Java object đã được Serialization, nó
sẽ chuyển đổi định dạng đã Serialization về trạng thái của Java object banđầu Nhờ vậy, tiến trình đó có thể sử dụng lại Java object của chúng ta
Để cho một object có thể sử dụng Serialization được, chúng ta phải choobject của chúng ta hiện thực một interface với tên gọi là
java.io.Serializable Interface này không có bất kỳ một phương thức nào
Trang 2923 }
Vì mình muốn sử dụng Serialization nên mình sẽ hiện
thực interface Serializable cho đối tượng Student như sau:
10 private int age;
OK, bây giờ chúng ta sẽ viết code để chuyển đổi đối tượng Student và lưu
byte streams của nó vào một tập tin nào đó xem thử nhé!
Trang 307 public class SerializationExample {
8
9 public static void main(String[] args) {
12 student.setName("Khanh");
14
15 // Use FileOutputStream to save the Student object into a file
16 try ( FileOutputStream fos = new FileOutputStream("E:\\student.txt");
Bây giờ, một tập tin đã được tạo và nếu bạn kiểm tra tập tin mà bạn đã lưu
đối tượng Student của chúng ta, bạn sẽ thấy nội dung giống giống như sau:
’ sr &com.huongdanjava.javaexample.Student I
ageL namet Ljava/lang/String;xp t Khanh
Vậy làm thế nào để tiến trình khác có thể sử dụng tập tin mình đã tạo trong
ví dụ trên để sử dụng, chúng ta viết code tiếp nhé!
Trang 3116 student = (Student) oos.readObject();
Như bạn thấy trước và sau khi chuyển đổi, đối tượng Student của mình vẫn
có những thông tin mà chúng ta đã lưu trước đó
1.3.1 ObjectInputStream
Lớp ObjectInputStream trong java được sử dụng để đọc các đối tượng và
dữ liệu nguyên thủy mà được ghi bằng việc sử dụng lớp
ObjectOutputStream
Khai báo của lớp ObjectInputStream
Dưới đây là khi báo của lớp Java.io.ObjectInputStream :
public class ObjectInputStream
extends InputStream implements ObjectInput, ObjectStreamConstants
Constructor của lớp ObjectInputStream
public final Object readObject() Đọc một đối tượng từ input stream
Trang 32Ví dụ về lớp ObjectInputStream trong java
Trong ví dụ này, chúng ta sẽ tuần tự hóa đối tượng của lớp Student Phươngthức writeObject() của lớp ObjectOutputStream cung cấp chức năng để tuần
tự hóa đối tượng Chương trình dưới đây sẽ lưu trạng thái của đối tượngtrong tệp có tên testout.txt
Tạo lớp Student.java
import java.io.Serializable;
public class Student implements Serializable
{ private static final long serialVersionUID = 1L;
private int id;
private String name;
private String address;
private int age;
public void Studet() {}
public Student(int id, String name, String address, int age) {
Trang 33public String toString() {
return "Student@[id=" + id + " , name=" + name + ", "+ "address= " + address + ",age =" + age+ "]";}
public class ObjectInputStreamExample {
public static void main(String[] args) throws IOException {ObjectInputStream ois = null;
Trang 35Lớp ObjectOutputStream trong java được sử dụng để ghi các kiểu dữ liệu
nguyên thuỷ và các đối tượng Java vào một OutputStream Chỉ có các đốitượng implements giao tiếp java.io.Serializable mới có thể được ghi vàostream
Khai báo của lớp ObjectOutputStream
Dưới đây là khi báo của lớp Java.io.ObjectOutputStream:
public class ObjectOutputStream
extends OutputStream implements ObjectOutput, ObjectStreamConstants
Constructor của lớp ObjectOutputStream
ObjectOutputStream(OutputStream OutputStream được chỉ định
out)
Các phương thức của lớp ObjectOutputStream
Trang 36private static final long serialVersionUID = 1L;
private int id;
private String name;
private String address;
private int age;
public void Studet() {}
public Student(int id, String name, String address, int age) { super();
Trang 37public void setAddress(String address)
public String toString() {
return "Student@[id=" + id + " , name=" + name + ", "
+ "address= " + address + ",age =" + age+ "]";
public class ObjectOutputStreamExample {
public static void main(String[] args) throws IOException {
ObjectOutputStream oos = null;
Trang 39Chương 2 : Generic
1 Lý thuyết:
2.1 Generic class
Java Generics được thêm vào ngôn ngữ lập trình Java từ Java 5 Generics
trong java là một cách để xác định các kiểu cụ thể cho các lớp và phương thức trong ngữ cảnh khác nhau Nghe có vẻ hơi trừu tượng, vì vậy chúng ta
sẽ xem xét lần lượt các khái niệm và một số ví dụ cụ thể Cụ thể trong bài này chúng ta sẽ học:
Lớp Generic trong java
Phương thức Generic trong java
Ký tự đại diện (?) trong Java Generics
Sử dụng Generics trong các đối tượng Collection
Lợi thế của Generics trong Java
2.1.1 Lớp Generic trong java
Một lớp có thể tham chiếu bất kỳ kiểu đối tượng nào được gọi là lớp
generic.
Ví dụ
Hãy xem ví dụ đơn giản sau về việc tạo và sử dụng lớp generic:
2.1.1 Tạo lớp generic MyGeneric.java:
Trong lớp trên, tham số <T> là một kiểu chung chung (bạn có thể sử dụng
một ký tự bất kỳ khác T) đại diện cho bất kỳ một kiểu cụ nào
Trang 40Ví dụ khi bạn định nghĩa MyGeneric<Integer> tức là T = Integer, lúc này bạn có thể hình dung lớp MyGeneric có dạng như sau:
public class TestGenerics3 {
public static void main(String args[]) {