1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

34 2,3K 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 203 KB

Nội dung

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

Trang 1

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 HoaPhạm Văn Hưởng

Lê Thị Hồng NhungNguyễn Thị Sen

HÀ NỘI – 2010

Trang 2

MỤC LỤC

I Vào ra tệp trong Java 2

1 Luồng (Streams) 2

1.1 Khái niệm luồng 2

1.2 Luồng byte (Byte Streams) 2

1.3 Luồng ký tự (Character Streams) 3

1.4 Những luồng được định nghĩa trước (The Predefined Streams) 3

2 Vào ra tệp 3

2.1 Vào ra tệp dùng luồng byte 3

2.1.1 Vào ra tệp văn bản 3

2.1.2 Vào ra tệp nhị phân 7

2.2 Vào ra tệp dùng luồng ký tự 12

II Chương trình 16

Trang 3

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ềuloạ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ếpqua 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ềucô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ườngthuậ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ệptin 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ươngtrình có thể đọc, ghi dữ liệu trong bộ nhớ, trên files và trao đổi dữ liệu thông qua cáckế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ậptrong 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ộtnguyê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 chocá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âncấp trong gói java.io.

Trang 4

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ườnghợ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ớiviệ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ữngthiế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óinà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 đốitượ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 đốitượng kiểu InputStream

Trang 5

 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êulớ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ôngtồ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ề IOExceptionkhi 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

Trang 6

int intvar = fin.read(); // đọc dữ liệu từ tệp đã mở

Trang 7

System.out.println("Usage: ShowFile File");

- 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ôngtồ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

Trang 9

fout = new FileOutputStream(“D:\\dest.txt”);

Trang 10

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 địnhdạng nhị phân)

boolean readBoolean( ) Đọc một giá trị Boolean

double readDouble( ) Đọc một giá trị Double

float readFloat( ) Đọc một giá trị Float

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)

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

Trang 11

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

Trang 12

- 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.

Trang 14

// Now, read them back

Trang 15

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.

Reader

abstract void close( ) Đóng luồng

void mark(int numChars) Đánh dấu vị trí hiện tại trên luồng

boolean markSupported( ) Kiểm tra xem luồng có hỗ trợ thao tác đánh

dấu mark() không?

int read(char buffer[ ]) Đọc buffer.length ký tự cho vào buffer

abstract int read(char buffer[ ],

int offset, int numChars)

Đọc numChars ký tự cho vào vùng đệmbuffer tại vị trí buffer[offset]

boolean ready( ) Kiểm tra xem luồng có đọc được không?

void reset( ) Dời con trỏ nhập đến vị trí đánh dấu trước đó

long skip(long numChars) Bỏ qua numChars của luồng nhập

Writer

abstract void close( ) Đóng luồng xuất Có lỗi đưa ra IOException

abstract void flush( ) Dọn dẹp luồng (buffer xuất)

void write(int ch) Ghi một ký tự

void write(byte buffer[ ]) Ghi một mảng các ký tự

abstract void write(char

buffer[ ], int offset, int

numChars)

Ghi một phần của mảng ký tự

Trang 16

void write(String str) Ghi một chuỗi

void write(String str, int

offset,

int numChars)

Ghi một phần của một chuỗi ký tự

Thông thường để vào/ra tệp người ta thường dùng luồng byte, nhưng đốivới luồng ký tự chúng ta cũng có thể thực hiện được Ưu điểm của việc dùngluồng ký tự là chúng thao tác trực tiếp trên các ký tự Unicode Vì vậy luồng ký

tự là chọn lựa tốt nhất khi cần lưu những văn bản Unicode Hai lớp luồng

thường dùng cho việc vào/ra dữ liệu ký tự xuống tệp là FileReader và FileWriter.

Đọ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 FileReader tạo

đối tượng 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 Tạo một bộ đệm đọc dữ liệu (BufferedReader) gắn với đối tượng FileReader.

- Đọc dữ liệu: dùng phương thức read() hoặc readLine() trên đối bộ đệm đọc

Trang 17

Ghi dữ liệu ra tệp

- Mở một tệp để ghi dữ liệu: dùng hàm tạo một đối số của lớp FileWriter tạo

đối tượng 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 Tạo một bộ đệm ghi dữ liệu (BufferedWriter) gắn với đối tượng FileWriter.

- Ghi dữ liệu: sử dụng phương thức write() trên bộ đệm đọc dữ liệu.

Đọc những dòng văn bản nhập từ bàn phím và ghi chúng xuống file tên là

“test.txt” Việc đọc và ghi kết thúc khi người dùng nhập vào chuỗi “stop”

Trang 19

Ví dụ: đọc và hiển thị nội dung của file “test.txt” lên màn hình

FileReader fr = new FileReader("D:\\test.txt");

BufferedReader br = new BufferedReader(fr);

- Bai tap lon: Lap trinh JaVa

- Giang vien huong dan: Thay Ngo Cong Thang

- Sinh vien thuc hien:

Nguyen Thi Linh Chi

Vu Thi Mai Hoa

Pham Van Huong

Trang 20

Le Thi Hong Nhung

Nguyen Thi Sen

*- De tai:

+ Tim hieu vao/ra tep (text/binary) trong JaVa

+ Viet chuong trinh nhap vao mot danh sach sinh vien voi cac thong tin la

Ma sinh vien, ho ten, ngay sinh.

Ghi danh sach sinh vien ra tep Doc lai danh sach sinh vien tu tep,tach ho ten thanh ho dem va ten,

sap xep danh sach theo ten van ABC, neu trung ten sap xep theo ho dem Chuong trinh co kha nang nhap du lieu

tu tep Excel va ghi du lieu ra tep Excel.

Trang 21

int choice;

String filename = "";

end_while:

while (true) {

System.out.println();

System.out.println("1 Nhap danh sach sinh vien tu ban phim."); System.out.println("2 Hien danh sach sinh vien ra man hinh."); System.out.println("3 Sap xep danh sach sinh vien theo ho ten."); System.out.println("4 Ghi danh sach sinh vien tu tep van ban."); System.out.println("5 Doc danh sach sinh vien ra tep van ban."); System.out.println("6 Ghi danh sach sinh vien tu tep Excel."); System.out.println("7 Doc danh sach sinh vien tu tep Excel."); System.out.println("8 Thoat chuong trinh.");

System.out.print("Nhap lua chon: ");

choice = cin.getInt();

switch (choice) {

case 1:

stdList = inputStudentList();

break;

case 2:

if (stdList != null) showStudentList(stdList);

else System.out.println("Khong co sinh vien trong danh sach.");

break;

case 3:

Trang 22

System.out.print("\nDANH SACH SINH VIEN DA DUOC LUU VAO TEP "+filename);

Trang 23

if (stdList != null)

{ excelOutput(stdList, filename);

System.out.print("\nDANH SACH SINH VIEN

DA DUOC LUU VAO TEP "+filename);

System.out.println();

} else

System.out.println("Khong co sinh vien trong danh sach.");

}

public static Student[] inputStudentList()

Trang 24

System.out.print("Nhap so sinh vien: ");

std_num = cin.getInt();

} while (std_num <= 0);

std = new Student[std_num];

System.out.println("Nhap danh sach sinh vien:");

for (int i = 0; i < std_num; i++) {

System.out.printf("Nhap sinh vien thu %d:\n", i + 1);

System.out.print("Nhap ma sinh vien: ");

}

public static void showStudentList(Student[] std)

Trang 25

int std_num = std.length;

System.out.println();

System.out.println();

System.out.println("Danh sach sinh vien:");

System.out.printf("%-15s %-20s %-15s\n", "Ma sinh vien", "Ho ten", "Ngay sinh");

for (int i = 0; i < std_num; i++)

System.out.printf("%-15s %-20s %-15s\n", std[i].getStudentID(), std[i].getFullName(), std[i].getDayOfBirth());

FileReader freader = new FileReader(filename);

BufferedReader buffered = new BufferedReader(freader);

Trang 26

int l_index = std_info.lastIndexOf(" ");

showStudentList(std);

buffered.close();

} catch (IOException exc) {

System.out.println("Khong the mo tep");

} return std;

FileWriter fwriter = new FileWriter(filename);

BufferedWriter buffered = new BufferedWriter(fwriter);

buffered.write("" + std_num);

buffered.newLine();

Ngày đăng: 14/04/2015, 09:00

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w