Tải bản đầy đủ (.doc) (46 trang)

BÀI TẬP LỚN LẬP TRÌNH JAVA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (264.53 KB, 46 trang )

TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
&
BÀI TẬP LỚN
LẬP TRÌNH JAVA
Đề tài: “Tìm hiểu về vào/ra tệp (Text và Binary) trong Java. Viết chương
trình nhập vào một danh sách sinh viên với các thông tin là mã sinh viên, họ
tên, ngày sinh. Ghi danh sách sinh viên ra tệp. Đọc lại danh sách sinh viên từ
tệp, tách họ tên thành họ đệm và tên, sắp xếp danh sách theo tên vần ABC,
nếu trùng tên sắp xếp theo họ đệm. Chương trình có khả năng nhập dữ liệu
từ tệp Excel và ghi dữ liệu ra tệp Excel.”
Giảng viên hướng dẫn: Ngô Công Thắng
Nhóm sinh viên thực hiện:
Nguyễn Thị Linh Chi
Vũ Thị Mai Hoa
Phạm Văn Hưởng
Lê Thị Hồng Nhung
Nguyễn Thị Sen
HÀ NỘI – 2010
MỤC LỤC
I. Vào ra tệp trong Java 15
1. Luồng (Streams) 15
1.1. Khái niệm luồng 15
1.2. Luồng byte (Byte Streams) 16
1.3. Luồng ký tự (Character Streams) 16
1.4. Những luồng được định nghĩa trước (The Predefined Streams) 16
2. Vào ra tệp 17
2.1. Vào ra tệp dùng luồng byte 17
2.1.1 Vào ra tệp văn bản 17
2.1.2 Vào ra tệp nhị phân 22
2.2. Vào ra tệp dùng luồng ký tự 27


II. Chương trình 31
/** 31
*- Lop: THC - K52 31
- Bai tap lon: Lap trinh JaVa 31
- Giang vien huong dan: Thay Ngo Cong Thang 31
- Sinh vien thuc hien: 31
Nguyen Thi Linh Chi 31
Vu Thi Mai Hoa 31
Pham Van Huong 31
Le Thi Hong Nhung 32
Nguyen Thi Sen 32
*- De tai: 32
+ Tim hieu vao/ra tep (text/binary) trong JaVa 32
+ Viet chuong trinh nhap vao mot danh sach sinh vien voi cac thong tin la Ma sinh vien, ho
ten, ngay sinh 32
2
Ghi danh sach sinh vien ra tep. Doc lai danh sach sinh vien tu tep,tach ho ten thanh ho dem
va ten, 32
sap xep danh sach theo ten van ABC, neu trung ten sap xep theo ho dem. Chuong trinh co
kha nang nhap du lieu 32
tu tep Excel va ghi du lieu ra tep Excel 32
**/ 32
import java.io.*; 32
import java.util.*; 32
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 32
import org.apache.poi.hssf.usermodel.HSSFSheet; 32
import org.apache.poi.hssf.usermodel.HSSFRow; 32
import org.apache.poi.hssf.usermodel.HSSFCell; 32
import fita.ncthang.console.cin; 32
32

public class JavaPro 32
{ 32
public static void main(String[] args) throws IOException 32
{ 32
Student[] stdList = null; 32
int choice; 33
String filename = ""; 33
end_while: 33
while (true) 33
{ 33
System.out.println(); 33
System.out.println("1. Nhap danh sach sinh vien tu ban phim."); 33
System.out.println("2. Hien danh sach sinh vien ra man hinh."); 33
System.out.println("3. Sap xep danh sach sinh vien theo ho ten."); 33
System.out.println("4. Ghi danh sach sinh vien tu tep van ban."); 33
System.out.println("5. Doc danh sach sinh vien ra tep van ban."); 33
System.out.println("6. Ghi danh sach sinh vien tu tep Excel."); 33
3
System.out.println("7. Doc danh sach sinh vien tu tep Excel."); 33
System.out.println("8. Thoat chuong trinh."); 33
System.out.print("Nhap lua chon: "); 33
choice = cin.getInt(); 33
switch (choice) 33
{ 33
case 1: 33
stdList = inputStudentList(); 33
break; 33
case 2: 33
if (stdList != null) showStudentList(stdList); 33
else System.out.println("Khong co sinh vien trong danh sach."); 33

break; 33
case 3: 34
stdList = sortingStudentList(stdList); 34
34
break; 34
case 4: 34
System.out.print("Nhap ten tep de ghi danh sach sinh vien: "); 34
filename = cin.getString(); 34
if (stdList != null) 34
{ fileOutput(stdList, filename); 34
System.out.print("\nDANH SACH SINH VIEN DA DUOC LUU VAO TEP "+filename); 34
System.out.println(); 34
} 34
else 34
System.out.println("Khong co sinh vien trong danh sach."); 34
break; 34
case 5: 34
System.out.print("Nhap ten tep de doc danh sach sinh vien: "); 34
filename = cin.getString(); 34
4
stdList = fileInput(filename); 34
break; 34
case 6: 34
System.out.print("Nhap ten tep Excel de ghi danh sach sinh vien (*.xls): "); 34
filename = cin.getString(); 35
if (stdList != null) 35
{ 35
excelOutput(stdList, filename); 35
System.out.print("\nDANH SACH SINH VIEN DA DUOC LUU VAO TEP "+filename);. .35
System.out.println(); 35

} 35
else 35
System.out.println("Khong co sinh vien trong danh sach."); 35
break; 35
case 7: 35
System.out.print("Nhap ten tep Excel de doc danh sach sinh vien (*.xls): "); 35
filename = cin.getString(); 35
stdList = excelInput(filename); 35
break; 35
35
case 8: 35
break end_while; 35
default: 35
System.out.println("Chon sai, hay chon lai."); 35
} 35
} 35
} 35
35
public static Student[] inputStudentList() 36
{ 36
Student[] std = null; 36
5
int std_num; 36
String id = "", name = "", birth = ""; 36
do 36
{ 36
System.out.print("Nhap so sinh vien: "); 36
std_num = cin.getInt(); 36
} while (std_num <= 0); 36
std = new Student[std_num]; 36

System.out.println("Nhap danh sach sinh vien:"); 36
for (int i = 0; i < std_num; i++) 36
{ 36
System.out.printf("Nhap sinh vien thu %d:\n", i + 1); 36
System.out.print("Nhap ma sinh vien: "); 36
id = cin.getString(); 36
System.out.print("Nhap ho ten: "); 36
name = cin.getString(); 36
System.out.print("Nhap ngay sinh (xx/yy/zzzz): "); 36
birth = cin.getString(); 36
std[i] = new Student(id, name, birth); 36
36
} 36
return std; 36
} 36
36
public static void showStudentList(Student[] std) 37
{ 37
int std_num = std.length; 37
System.out.println(); 37
System.out.println(); 37
System.out.println("Danh sach sinh vien:"); 37
System.out.printf("%-15s %-20s %-15s\n", "Ma sinh vien", "Ho ten", "Ngay sinh");. .37
6
for (int i = 0; i < std_num; i++) 37
System.out.printf("%-15s %-20s %-15s\n", std[i].getStudentID(), std[i].getFullName(),
std[i].getDayOfBirth()); 37
} 37
37
public static Student[] fileInput(String filename) throws IOException 37

{ 37
Student[] std = null; 37
int std_num; 37
String id = "", name = "", birth = ""; 37
String std_info = ""; 37
try { 37
FileReader freader = new FileReader(filename); 37
BufferedReader buffered = new BufferedReader(freader); 37
std_num = Integer.parseInt(buffered.readLine()); 37
std = new Student[std_num]; 37
for (int i = 0; i < std_num; i++) 37
{ 37
std_info = buffered.readLine().trim(); 37
int index = std_info.indexOf(" "); 38
int l_index = std_info.lastIndexOf(" "); 38
id = std_info.substring(0, index).trim(); 38
name = std_info.substring(index + 1, l_index).trim(); 38
birth = std_info.substring(l_index + 1).trim(); 38
std[i] = new Student(id, name, birth); 38
38
} 38
System.out.print("Noi dung co trong tep van ban la:\n"); 38
showStudentList(std); 38
buffered.close(); 38
} 38
7
catch (IOException exc) { 38
System.out.println("Khong the mo tep"); 38
} 38
return std; 38

} 38
38
public static void fileOutput(Student[] std, String filename) throws IOException 38
{ 38
String std_info; 38
int std_num = std.length; 38
try { 38
FileWriter fwriter = new FileWriter(filename); 38
BufferedWriter buffered = new BufferedWriter(fwriter); 38
buffered.write("" + std_num); 38
buffered.newLine(); 39
for (int i = 0; i < std_num; i++) 39
{ 39
std_info = "" + std[i].getStudentID() + " " + std[i].getFullName() + " " +
std[i].getDayOfBirth(); 39
buffered.write(std_info); 39
buffered.newLine(); 39
} 39
buffered.flush(); 39
buffered.close(); 39
} 39
catch (IOException exc) { 39
System.out.println("Khong the tao tep"); 39
} 39
} 39
39
public static Student[] sortingStudentList(Student[] std) 39
8
{ 39
Student tmp = null; 39

int std_num = std.length; 39
for (int i = 0; i < std_num - 1; i++) 39
for (int j = i + 1; j < std_num; j++) 39
if (std[i].getName().compareToIgnoreCase(std[j].getName()) == 0) 39
{ 39
if (std[i].getFullName().compareToIgnoreCase(std[j].getFullName()) > 0) 39
{ 40
tmp = std[i]; 40
std[i] = std[j]; 40
std[j] = tmp; 40
showStudentList(std); 40
} 40
} 40
else 40
if (std[i].getName().compareToIgnoreCase(std[j].getName()) > 0) 40
{ 40
tmp = std[i]; 40
std[i] = std[j]; 40
std[j] = tmp; 40
showStudentList(std); 40
} 40
else 40
showStudentList(std); 40
40
return std; 40
} 40
40
public static Student[] excelInput(String filename) 40
{ 40
9

Student[] std = null; 40
int std_num = 0; 40
String id = "", name = "", birth = ""; 40
try 41
{ 41
FileInputStream fIn = new FileInputStream(filename); 41
HSSFWorkbook workbook = new HSSFWorkbook(fIn); 41
HSSFSheet sheet = workbook.getSheet("Sheet0"); 41
HSSFRow row = null; 41
HSSFCell cell = null; 41
row = sheet.getRow(0); 41
cell = row.getCell(0); 41
std_num = Integer.parseInt(cell.getStringCellValue()); 41
std = new Student[std_num]; 41
for (int i = 1; i <= std_num; i++) 41
{ 41
row = sheet.getRow(i); 41
for (int j = 0; j < 3; j++) 41
{ 41
cell = row.getCell(j); 41
switch (j) 41
{ 41
case 0: 41
id = cell.getStringCellValue(); 41
break; 41
case 1: 41
name = cell.getStringCellValue(); 41
break; 41
case 2: 41
birth = cell.getStringCellValue(); 41

break; 42
10
} 42
} 42
std[i-1] = new Student(id, name, birth); 42
42
} 42
System.out.print("Noi dung co trong tep Excel la:\n"); 42
showStudentList(std); 42
} 42
catch (Exception exc) { 42
System.out.println(exc.getMessage()); 42
} 42
return std; 42
} 42
42
public static void excelOutput(Student[] std, String filename) 42
{ 42
try 42
{ 42
HSSFWorkbook wb = new HSSFWorkbook(); 42
HSSFSheet sheet = wb.createSheet(); 42
HSSFRow row = null; 42
HSSFCell cell = null; 42
int std_num = std.length; 42
row = sheet.createRow(0); 42
cell = row.createCell(0); 42
cell.setCellType(HSSFCell.CELL_TYPE_STRING); 42
cell.setCellValue("" + std_num); 43
43

for(int i = 1; i <= std_num; i++) 43
{ 43
row = sheet.createRow(i); 43
11
cell = row.createCell(0); 43
cell.setCellType(HSSFCell.CELL_TYPE_STRING); 43
cell.setCellValue(std[i-1].getStudentID()); 43
43
cell = row.createCell(1); 43
cell.setCellType(HSSFCell.CELL_TYPE_STRING); 43
cell.setCellValue(std[i-1].getFullName()); 43
43
cell = row.createCell(2); 43
cell.setCellType(HSSFCell.CELL_TYPE_STRING); 43
cell.setCellValue(std[i-1].getDayOfBirth()); 43
} 43
FileOutputStream fOut = new FileOutputStream(filename); 43
wb.write(fOut); 43
fOut.flush(); 43
fOut.close(); 43
} 43
catch(Exception exc) { 43
System.out.println(exc.getMessage()); 43
} 43
} 43
} 43
44
class Student 44
{ 44
private String studentID; 44

private String fullname; 44
private String dayofbirth; 44
44
public Student() 44
{ 44
12
studentID = ""; 44
fullname = ""; 44
dayofbirth = ""; 44
} 44
44
public Student(String id, String name, String birth) 44
{ 44
studentID = id; 44
fullname = name; 44
dayofbirth = birth; 44
} 44
public Student(Student std) 44
{ 44
studentID = std.studentID; 44
fullname = std.fullname; 44
dayofbirth = std.dayofbirth; 44
} 44
45
public void setStudentID(String id) 45
{ 45
studentID = id; 45
} 45
45
public String getStudentID() 45

{ 45
return studentID; 45
} 45
45
public void setFullName(String name) 45
{ 45
fullname = name; 45
13
} 45
45
public String getFullName() 45
{ 45
return fullname; 45
} 45
45
public String getName() 45
{ 45
return fullname.substring(fullname.lastIndexOf(" ") + 1).trim(); 45
} 45
45
public void setDayOfBirth(String birth) 45
{ 46
dayofbirth = birth; 46
} 46
46
public String getDayOfBirth() 46
{ 46
return dayofbirth; 46
} 46
} 46

46
46
14
I. Vào ra tệp trong Java
Các dữ liệu mà một chương trình ngôn ngữ Java sử dụng phải lấy từ rất nhiều
loại nguồn dữ liệu khác nhau, bao gồm cả cơ sở dữ liệu, chuyển giao byte trực tiếp
qua một ổ cắm (socket) và các tệp tin. Ngôn ngữ Java sẽ mang lại cho bạn rất nhiều
công cụ để bạn có thể nhận được các thông tin từ các nguồn bên ngoài. Các công cụ
này phần lớn nằm trong gói java.io.
Trong tất cả các nguồn dữ liệu sẵn có, các tệp tin là phổ biến nhất và thường
thuận tiện nhất. Việc hiểu biết cách sử dụng các API có sẵn của ngôn ngữ Java để
tương tác với các tệp tin là một kỹ năng cơ bản của lập trình viên.
Nhìn chung, ngôn ngữ Java cung cấp cho bạn một lớp bao gói (File) cho kiểu tệp
tin trong hệ điều hành của bạn. Để đọc tệp tin đó, bạn phải sử dụng các luồng
(streams) phân tích cú pháp các byte đầu vào thành các kiểu của ngôn ngữ Java.
Xử lý files là một phần của công việc xử lý các luồng, giúp cho một chương
trình có thể đọc, ghi dữ liệu trong bộ nhớ, trên files và trao đổi dữ liệu thông qua các
kết nối trên mạng.
1. Luồng (Streams)
1.1. Khái niệm luồng
Tất cả những hoạt động nhập/xuất dữ liệu (nhập dữ liệu từ bàn phím, lấy dữ
liệu từ mạng về, ghi dữ liệu ra đĩa, xuất dữ liệu ra màn hình, máy in, …)
đều được quy về một khái niệm gọi là luồng (stream). Luồng là nơi có thể
“sản xuất” và “tiêu thụ” thông tin. Luồng thường được hệ thống xuất nhập
trong Java gắn kết với một thiết bị vật lý. Tất cả các luồng đều có chung một
nguyên tắc hoạt động ngay cả khi chúng được gắn kết với các thiết bị vật lý
khác nhau. Vì vậy cùng một lớp, phương thức xuất nhập có thể dùng chung cho
các thiết bị vật lý khác nhau. Java hiện thực luồng bằng tập hợp các lớp phân
cấp trong gói java.io.
15

Java định nghĩa 2 kiểu luồng: Byte (hỗ trợ việc nhập/xuất dữ liệu trên byte,
thường được dùng để đọc ghi các dữ liệu nhị phân) và Ký tự (Luồng ký tự được
thiết kế hỗ trợ việc xuất nhập dữ liệu kiểu ký tự (Unicode). Trong một vài trường
hợp luồng ký tự sử dụng hiệu quả hơn luồng byte, nhưng ở mức hệ thống thì tất
cả những xuất nhập đều phải quy về byte. Luồng ký tự hỗ trợ hiệu quả chỉ đối với
việc quản lý, xử lý các ký tự).
1.2. Luồng byte (Byte Streams)
Các luồng byte được định nghĩa dùng hai lớp phân cấp. Mức trên cùng
là hai lớp trừu tượng InputStream và OutputStream. InputStream định nghĩa
những đặc điểm chung cho những luồng nhập byte. OutputStream mô tả cách
xử lý của các luồng xuất byte. Các lớp con dẫn xuất từ hai lớp InputStream và
OutputStream sẽ hỗ trợ chi tiết tương ứng với việc đọc ghi dữ liệu trên những
thiết bị khác nhau.
1.3. Luồng ký tự (Character Streams)
Các luồng ký tự được định nghĩa dùng hai lớp phân cấp. Mức trên cùng là hai
lớp trừu tượng Reader và Writer. Lớp Reader dùng cho việc nhập dữ liệu của
luồng, lớp Writer dùng cho việc xuất dữ liệu của luồng. Những lớp dẫn xuất từ
Reader và Writer thao tác trên các luồng ký tự Unicode.
1.4. Những luồng được định nghĩa trước (The Predefined Streams)
Tất cả các chương trình viết bằng java luôn tự động import gói java.lang. Gói
này có định nghĩa lớp System, bao gồm một số đặc điểm của môi trường run-
time, nó có ba biến luồng được định nghĩa trước là in, out và err, các biến này là
các fields được khai báo static trong lớp System.
• System.out: luồng xuất chuẩn, mặc định là console. System.out là một đối
tượng kiểu PrintStream.
• System.in: luồng nhập chuẩn, mặc định là bàn phím. System.in là một đối
tượng kiểu InputStream.
16
• System.err: luồng lỗi chuẩn, mặc định cũng là console. System.err cũng là
một đối tượng kiểu PrintStream giống System.out.

2. Vào ra tệp
2.1. Vào ra tệp dùng luồng byte
Java cung cấp hai lớp InputStream và OutputStream là siêu lớp đối với tất các
các lớp luồng xuất nhập kiểu byte. Những phương thức trong hai siêu lớp này
đưa ra các lỗi kiểu IOException. Những phương thức định nghĩa trong hai siêu
lớp này có thể dùng trong các lớp con của chúng. Vì vậy tập các phương thức đó
là tập tối tiểu các chức năng nhập xuất mà những luồng nhập xuất kiểu byte có
thể sử dụng.
2.1.1 Vào ra tệp văn bản
Đối với các file text, có các byte dữ liệu là các ký tự trong bảng mã ASCII,
Java sử dụng FileInputStream và FileOutputStream.
• Đọc dữ liệu từ tệp
- Mở một tệp để đọc dữ liệu: tạo đối tượng lớp FileInputStream gắn với tệp
cần mở, tên tệp cần mở là đối số truyền vào cho hàm tạo của lớp, Nếu tệp không
tồn tại thì đưa ra FileNotFoundException.
- Đọc dữ liệu: dùng phương thức read(), phương thức này đọc từng byte từ tệp
và trả về giá trị của byte đọc được. Trả về -1 khi hết tệp, và trả về IOException
khi có lỗi đọc.
- Đóng tệp: dùng phương thức close(), sau khi làm việc xong cần đóng tệp để
giải phóng tài nguyên hệ thống.
Cú pháp chung:
FileInputStream fin = new FileInputStream(String filename); // tạo đối tượng
gắn với tệp cần mở
do
{
17
int intvar = fin.read(); // đọc dữ liệu từ tệp đã mở
// xử lý dữ liệu
} while (intvar != -1);
fin.close(); // đóng tệp đã mở để giải phóng tài nguyên hệ thống

Ví dụ:
/*
Hiển thị nội dung của tệp có tên test.txt
*/
import java.io.*;
class ShowFile
{
public static void main(String args[]) throws IOException
{
int i;
FileInputStream fin;
try
{
fin = new FileInputStream(“test.txt”);
}
catch(FileNotFoundException exc)
{
System.out.println("File Not Found");
return;
}
catch(ArrayIndexOutOfBoundsException exc)
{
18
System.out.println("Usage: ShowFile File");
return;
}

// read bytes until EOF is encountered
do
{

i = fin.read();
if(i != -1) System.out.print((char) i);
} while(i != -1);
fin.close();
}
}
• Ghi dữ liệu ra tệp
- Mở một tệp để ghi dữ liệu: tạo đối tượng lớp FileOutputStream gắn với tệp
cần mở, tên tệp cần mở là đối số truyền vào cho hàm tạo của lớp, Nếu tệp không
tồn tại thì đưa ra FileNotFoundException.
- Ghi dữ liệu xuống: dùng phương thức write(int byteval), phương thức này
ghi một byte xác định bởi tham số byteval xuống tệp, và trả về IOException khi
có lỗi ghi.
- Đóng file: dùng phương thức close(), sau khi làm việc xong cần đóng tệp để
giải phóng tài nguyên hệ thống.
Cú pháp chung:
FileOutputStream fout = new FileOutputStream(String filename); // tạo đối
tượng gắn với tệp cần mở
fout.write(int byteval); // ghi dữ liệu xuống tệp
fout.close(); // đóng tệp đã mở để giải phóng tài nguyên hệ thống
19
Ví dụ:
/* Copy nội dung của một tệp text*/
import java.io.*;
class CopyFile
{
public static void main(String args[])throws IOException
{
int i;
FileInputStream fin;

FileOutputStream fout;
try
{
// open input file
try
{
fin = new FileInputStream(“D:\\source.txt”);
}
catch(FileNotFoundException exc)
{
System.out.println("Input File Not Found");
return;
}

// open output file
try
{
20
fout = new FileOutputStream(“D:\\dest.txt”);
}
catch(FileNotFoundException exc)
{
System.out.println("Error Opening OutputFile");
return;
}
}
catch(ArrayIndexOutOfBoundsException exc)
{
System.out.println("Usage: CopyFile From To”);
return;

}

// Copy File
try
{
do
{
i = fin.read();
if(i != -1) fout.write(i);
} while(i != -1);
}
catch(IOException exc)
{
System.out.println("File Error");
}
21
fin.close();
fout.close();
}
}
2.1.2 Vào ra tệp nhị phân
Để đọc và ghi giá trị nhị phân của các kiểu dữ liệu trong java, chúng ta sử
dụng DataInputStream và DataOutputStream.
DataInputStream: thực hiện interface DataInput. Interface DataInput có các
phương thức cho phép đọc tất cả những kiểu dữ liệu cơ sở của Java (theo định
dạng nhị phân).
Phương thức Nghĩa
boolean readBoolean( ) Đọc một giá trị Boolean
Byte readByte( ) Đọc một Byte
char readChar( ) Đọc một Char

double readDouble( ) Đọc một giá trị Double
float readFloat( ) Đọc một giá trị Float
int readInt( ) Đọc một giá trị Int
Long readLong( ) Đọc một giá trị Long
short readShort() Đọc một giá trị Short
DataOutputStream: thực hiện interface DataOuput. Interface DataOutput có
các phương thức cho phép ghi tất cả những kiểu dữ liệu cơ sở của java đến luồng
(theo định dạng nhị phân).
Phương thức Nghĩa
void writeBoolean (boolean val) Ghi xuống luồng một giá trị
boolean được xác định bởi val.
void writeByte (int val) Ghi xuống luồng một byte được
22
xác định bởi val.
void writeChar (int val) Ghi xuống luồng một Char được xác
định bởi val.
void writeDouble (double val) Ghi xuống luồng một giá trị Double
được xác định bởi val.
void writeFloat (float val) Ghi xuống luồng một giá trị float
được xác định bởi val.
void writeInt (int val) Ghi xuống luồng một giá trị int được
xác định bởi val.
void writeLong (long val) Ghi xuống luồng một giá trị long
được xác định bởi val.
void writeShort (int val) Ghi xuống luồng một giá trị short
được xác định bởi val.
• Đọc dữ liệu từ tệp
- Mở một tệp để đọc dữ liệu: dùng hàm tạo một đối số của lớp
DataInputStream tạo đối tượng gắn với tệp cần mở, với đối số truyền vào là đối
tượng lớp FileInputStream.

- Đọc dữ liệu: sử dụng phương thức tương ứng cho từng kiểu dữ liệu.
- Đóng tệp: dùng phương thức close(), hủy đối tượng gắn với tệp, giải phóng
tài nguyên hệ thống.
Cú pháp chung:
FileInputStream fin = new FileInputStream(String filename);
DataInputStream dataIn = new DataInputStream(fin); // tạo đối tượng
DataInputStream gắn với tệp cần mở
// đọc dữ liệu từ tệp
dataIn.close(); // hủy đối tượng gắn với tệp, giải phóng tài nguyên hệ thống.
• Ghi dữ liệu ra tệp
23
- Mở một tệp để ghi dữ liệu: dùng hàm tạo một đối số của lớp
DataOutputStream tạo đối tượng gắn với tệp cần mở, với đối số truyền vào là đối
tượng lớp FileOutputStream.
- Ghi dữ liệu: sử dụng phương thức tương ứng cho từng kiểu dữ liệu.
- Đóng tệp: dùng phương thức close(), hủy đối tượng gắn với tệp, giải phóng
tài nguyên hệ thống.
Cú pháp chung:
FileOutputStream fout = new FileOutputStream(String filename);
DataOutputStream dataOut = new DataOutputStream(fout); // tạo đối tượng
DataOutputStream gắn với tệp cần mở
// ghi dữ liệu xuống tệp
dataIn.close(); // hủy đối tượng gắn với file, giải phóng tài nguyên hệ thống.
Ví dụ:
/* Dùng DataOutputStream và DataInputStream để ghi và đọc những kiểu dữ liệu
khác nhau trên file */
import java.io.*;
class RWData
{
public static void main(String args[]) throws IOException

{
DataOutputStream dataOut;
DataInputStream dataIn;
int i = 10;
double d = 1023.56;
boolean b = true;
24
try
{
dataOut = new DataOutputStream(
new FileOutputStream("D:\\testdata"));
}
catch(IOException exc)
{
System.out.println("Cannot open file.");
return;
}
try
{
System.out.println("Writing " + i);
dataOut.writeInt(i);
System.out.println("Writing " + d);
dataOut.writeDouble(d);
System.out.println("Writing " + b);
dataOut.writeBoolean(b);
System.out.println("Writing " + 12.2 * 7.4);
dataOut.writeDouble(12.2 * 7.4);
}
catch(IOException exc)
{

System.out.println("Write error.");
}
dataOut.close();
System.out.println();
25

×