Xu Hướng 2/2024 # Đọc Ghi File Trong Java # Top 7 Xem Nhiều

Bạn đang xem bài viết Đọc Ghi File Trong Java được cập nhật mới nhất tháng 2 năm 2024 trên website Uta.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Có 3 kiểu stream được sử dụng để đọc ghi file trong java đó là byte stream, character stream và buffered stream. Ngoài ra bạn còn có thể sử dụng Scanning (đọc) và Formatting (ghi).

1. Đọc nghi file trong java với byte stream

Các chương trình sử dụng Byte Stream để đọc ghi dữ liệu theo từng byte(8bit). Tất cả các class Byte Stream có nguồn gốc từ InputStream và OutputStream.

Sử dụng Byte Stream

Có rất nhiều class Byte Stream, để hình dung Byte Stream hoạt động như thế nào, chúng ta sẽ tập trung vào FileInputStream và FileOutputStream, ví dụ:

public class CopyFileByte { public static void main(String [] args) throws IOException { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { inputStream = new FileInputStream("inStream.txt"); outputStream = new FileOutputStream("outStream.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } }

Việc đóng một Stream khi mà không có nhu cầu sử dụng nó nữa là một việc rất quan trong – tránh bị leak tài nguyên. Ví dụ trên sử dụng khối finally để đảm bảo cả 2 Streams (input, output) đều được đóng ngay cả khi có lỗi xảy ra.

2. Đọc ghi file trong java với character stream

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 để thực hiện input và output cho Unicode 16 bit. Tất cả các class Character Stream có nguồn gốc từ Reader và Writer.

Sử dụng Character Stream ublic class CopyFileCharacter { public static void main(String [] args) throws IOException { FileReader in = null; FileWriter out = null; try { in = new FileReader("input.txt"); out = new FileWriter("output.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } }finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } 3. Đọc ghi file trong java với buffered stream

Các ví dụ trên không sử dụng Buffered Streams, điều này có nghĩa là việc đọc và xuất dữ liệu được thực hiện trực tiếp dưới quyền điều khiển của hệ điều hành, gây lãng phí thời gian và tài nguyên. Để giảm thiểu những trên, Buffered Streams đã được sinh ra. Buffered Streams được sử dụng để tăng tốc độ hoạt động I/O, bằng cách đơn giản là tạo ra một khoảng nhớ đệm với kích thước cụ thể nào đó. Vì vậy chúng ta không cần phải truy cập vào ổ đĩa cứng khi thực hiện I/O. Một chương trình có thể chuyển đổi từ không sử dụng buffered stream (Byte Stream và Chracter Stream sang sử dụng buffered stream bằng việc sử dụng ý tưởng “Wrapping”

Lớp wrapper cho byte stream Lớp wrapper cho character stream Sử dụng buffered stream để đọc ghi file

Ví dụ: Sử dụng Wrapper cho byte stream

public class CopyFileBuffer1 { public static void main(String [] args) throws IOException { BufferedInputStream bufferIn = null; BufferedOutputStream bufferOut = null; try { InputStream inputStream = new FileInputStream("input.txt"); OutputStream outputStream = new FileOutputStream("output.txt"); bufferIn = new BufferedInputStream(inputStream); bufferOut = new BufferedOutputStream(outputStream); int c; while ((c = bufferIn.read()) != -1) { bufferOut.write(c); } } finally { if (bufferIn != null) { bufferIn.close(); } if (bufferOut != null) { bufferOut.close(); } } } }

Ví dụ: Sử dụng Wrapper cho character stream

public class CopyFileBuffer2 { public static void main(String [] args) throws IOException { BufferedReader bufferedReader = null; BufferedWriter bufferedWriter = null; try { Reader reader = new FileReader("input.txt"); Writer writer = new FileWriter("output.txt"); bufferedReader = new BufferedReader(reader); bufferedWriter = new BufferedWriter(writer); int c; while ((c = bufferedReader.read()) != -1) { bufferedWriter.write(c); } } finally { if (bufferedReader != null) { bufferedReader.close(); } if (bufferedWriter != null) { bufferedWriter.close(); } } } } 4. Đọc ghi file trong java với Scanning và Formatting Scanning

Lớp Scanner có thể phân tích được các kiểu dữ liệu nguyên thủy và kiểu String bằng việc sử dụng biểu thức chính quy (regular expressions). Mặc định các khoảng trắng được Scanner dùng để phân biệt các ký tự trong một chuỗi.

Sử dụng Scanner

Scanner có thể được sử dụng để nhập dữ liệu từ bàn phím, phân tích chuỗi ký tự, nhập dữ liêu từ file.

Ví dụ 1: Đoạn code này cho phép người dùng đọc ký tự số từ bàn phím bằng cách khởi tạo Scanner sử dụng chúng tôi

Scanner sc = new Scanner(System.in); int i = sc.nextInt();

Ví dụ 2: Đoạn code này lấy tất cả các số có kiểu long từ file chúng tôi

Scanner sc = new Scanner(new File("myNumbers.txt")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); }

Ví dụ 3: Scanner cũng có thể sử dụng dụng bộ phân cách (Delimiters) khác do người dùng tự định nghĩa, đoạn code sau đọc và phân tích thành các mục từ một chuỗi.

String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\s*fish\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); Một số phương thức của lớp Scanner Formatting

Ngoài 2 phương thức print và println. Java cung cấp 2 phương thức định dạng in cho chúng ta là printf và format và 2 phương thức này có chức năng tương tự nhau. Bạn có thể gọi phương thức này ở bất kỳ nơi đâu trong code của bạn.

Ví dụ: định dạng in cho các biến số:

System.out.format("The value of " + "the float variable is " + "%f, while the value of the " + "integer variable is %d, " + "and the string is %s", floatVar, intVar, stringVar);

Một điều nữa là ta có thể in theo hệ thống định dạng Pháp, ngăn cách phần nguyên và phần thập phân của số thực thập phân bằng định dạng Locale.FRANCE, ví dụ:

System.out.format(Locale.FRANCE, "The value of the float " + "variable is %f, while the " + "value of the integer variable " + "is %d, and the string is %s%n", floatVar, intVar, stringVar);

Ví dụ: một chương trình đơn giản:

public class TestFormat { public static void main(String[] args) { long n = 461012; double pi = Math.PI; System.out.format(Locale.FRANCE, Calendar c = Calendar.getInstance(); } }

Bảng sau thông kê một vài “Converters” và “Flags” được sử dụng trong ví dụ trên:

Đọc Và Ghi File Trong Java (Bài 5)

Đọc và ghi file trong java là các hoạt động nhập/xuất dữ liệu (nhập dữ liệu từ bàn phím, đọc dữ liệu từ file, ghi dữ liệu lên màn hình, ghi ra file, ghi ra đĩa, ghi ra máy in…) đều được gọi là luồng (stream).

Đọc và ghi file trong java – Các loại luồng dữ liệu

Bước 1: Tạo đối tượng luồng và liên kết với nguồn dữ liệu.

Bước 2: Thao tác dữ liệu (đọc hoặc ghi hoặc cả hai).

Bước 3: Đóng luồng.

Xử lý nhập xuất dữ liệu sử dụng luồng byte

Sử dụng luồng byte trong các trường hợp như nhập xuất kiểu dữ liệu nguyên thủy (như kiểu int, float, double, boolean), nhập xuất kiểu dữ liệu kiểu đối tượng (object)

Đọc và ghi dữ liệu nhị phân (binary data)

package file_handling; import java.io.DataOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * * @author chúng tôi */ public class DataOutputExample { public static void main(String[] args) { try {

Ví dụ 2: Đọc dữ liệu chứa trong tập tin d:/mydata.bin với DataInputStream

package file_handling; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /** * * @author chúng tôi */ public class DataInputExample { public static void main(String[] args) { try {

Ví dụ 3: Đọc và ghi dữ liệu kiểu object

Tạo lớp Stock và lớp này phải cài đặt giao diện Serializable

package file; import java.io.Serializable; /** * * @author chúng tôi */ public class Stock implements Serializable{ private int id; private String desc; private double price; private int quantity; public Stock(int id, String desc, double price, int quantity) { chúng tôi = id; chúng tôi = desc; this.price = price; this.quantity = quantity; } @Override public String toString() { return id + "-" + desc + "-" + price + "-" + quantity; } }

Tạo lớp ObjectOutputExample dùng để ghi dữ liệu kiểu object

package file; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; /** * * @author chúng tôi */ public class ObjectOutputExample { public static void main(String[] args) { try {

Tạo lớp ObjectInputExample dùng để đọc dữ liệu kiểu object

package file; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.ObjectInputStream; /** * * @author chúng tôi */ public class ObjectInputExample { public static void main(String[] args) { try {

Xử lý nhập xuất dữ liệu bằng luồng character

Luồng byte rất mạnh mẽ và linh hoạt. Tuy nhiên nếu bạn muốn lưu trữ file chứa văn bản Unicode thì luồng character là lựa chọn tốt nhất vì ưu điểm của luồng character là nó thao tác trực tiếp trên ký tự Unicode.

Tất cả các luồng character đều được kế thừa từ 2 lớp Reader và Writer

Ví dụ 1: Ghi dữ liệu với FileWriter

package file_handling; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * * @author chúng tôi */ public class FileWriterExample { public static void main(String[] args) { try {

Ví dụ 2: Đọc dữ liệu với FileReader

package file_handling; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; /** * * @author chúng tôi */ public class FileReaderExample { public static void main(String[] args) { try { Đọc và ghi file trong java – Thực hành

Tạo package tên file và thực hiện các yêu cầu bên dưới

Bài thực hành số 1: Tạo lớp NhanVien có các thuộc tính mã nhân viên, họ tên, tuổi và lương.

Viết setter, getter, constructor và toString.

Viết phương thức cho phép nhập thông tin cho 3 nhân viên từ bàn phím. Sử dụng FileWriter để ghi thông tin vào nhanvien.txt.

Viết phương thức để đọc nội dung file chúng tôi và in những gì đọc được từ file ra màn hình.

Bài thực hành số 2: Tạo lớp mới và thực hiện các xử lý sau

Viết phương thức tạo mảng 3 nhân viên, nhập thông tin cho các nhân viên, sử dụng ObjectOutputStream để ghi mảng đối tượng nhân viên vào file nhanvien.bin

Viết phương thức để đọc file chúng tôi và in mảng nhân viên ra màn hình.

Đọc Ghi File Json Trong Jackson Với Java Io

Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu cách áp dụng Java IO kết hợp với Jackson để xử lý việc đọc ghi file Json trong Java.

Maven Dependency

Để sử dụng Jackson trong Project Maven chúng ta cần thêm dependency sau:

Ở đây, mình sử dụng phiên bản 2.9.8, các bạn có thể sử dụng phiên bản mới hơn tại maven central.

Ghi file Json với OutputStream

Chúng ta có thể ghi file Json vào Outputstream bằng cách sử dụng JsonGenerator class. Trước tiên, chúng ta cần khởi tạo một JsonGenerator nhận OutputStream làm tham số đầu vào.

Trong ví dụ này thì chúng ta sẽ sử dụng ByteArrayOutputStream thừa kế OutputStream.

ByteArrayOutputStream stream = new ByteArrayOutputStream(); JsonFactory jfactory = new JsonFactory(); JsonGenerator jGenerator = jfactory .createGenerator(stream, JsonEncoding.UTF8);

Tiếp theo, giả sử chúng ta muốn ghi một file Json có cấu trúc như sau:

{ "name":"Tom", "age":25, "address":[ "Poland", "5th avenue" ] }

Chúng ta có thể sử dụng JsonGenerator để ghi các field vào OutputStream.

jGenerator.writeStartObject(); jGenerator.writeStringField("name", "Tom"); jGenerator.writeNumberField("age", 25); jGenerator.writeFieldName("address"); jGenerator.writeStartArray(); jGenerator.writeString("Poland"); jGenerator.writeString("5th avenue"); jGenerator.writeEndArray(); jGenerator.writeEndObject(); jGenerator.close();

Cuối cùng, chúng ta có thể chuyển OutputStream sang String để kiểm tra kết quả

String json = new String(stream.toByteArray(), "UTF-8"); System.out.println(json); Convert Json sang JsonParser

Khi chúng ta nhận được Json String và chúng ta muốn trích xuất dữ liệu qua từng field thông qua JsonParser class có thể làm như sau:

String json = "{"name":"Tom","age":25,"address":["Poland","5th avenue"]}"; JsonFactory jfactory = new JsonFactory(); JsonParser jParser = jfactory.createParser(json);

Để trích dữ liệu Json chúng ta có thể sử dụng nextToken() để duyệt qua và lấy giá trị thông qua các method:

getCurrentName(): Trả về tên của field trong Json.

getText(): Lấy giá trị của một field dưới dạng string.

getIntValue(): Lấy giá trị field dứoi dạng int.

public class Main { public static void main(String[] agrs) throws IOException { String json = "{"name":"Tom","age":25,"address":["Poland","5th avenue"]}"; JsonFactory jfactory = new JsonFactory(); JsonParser jParser = jfactory.createParser(json); String parsedName = null; Integer parsedAge = null; while (jParser.nextToken() != JsonToken.END_OBJECT) { String fieldname = jParser.getCurrentName(); if ("name".equals(fieldname)) { jParser.nextToken(); parsedName = jParser.getText(); } if ("age".equals(fieldname)) { jParser.nextToken(); parsedAge = jParser.getIntValue(); } if ("address".equals(fieldname)) { jParser.nextToken(); while (jParser.nextToken() != JsonToken.END_ARRAY) { addresses.add(jParser.getText()); } } } jParser.close(); System.out.println(parsedName); System.out.println(parsedAge); System.out.println(addresses); } }

Như vậy là chúng ta đã biết cách ghi file Json thông qua cú pháp trong Java với JsonGenerator, và cách để object hoá một chuỗi với JsonParser.

Tổng Hợp Cách Đọc File Text Trong Java

Chúng ta có rất nhiều cách để đọc một file text trong java. Chúng ta có thể sử dụng hầu hết các subclass của InputStream như FileInputStream, BufferedInputStream, ObjectInputStream etc hoặc các subclass của InputStreamReader như FileReader, BufferedReader etc.

Đọc file text với FileInputStream

FileInputStream đọc dữ liệu theo luồng byte có thứ tự. Chúng ta có thể chuyển dữ liệu kiểu byte sang char để được văn bản trong file text.

Ví dụ 1: Đọc từng ký tự trong file text với FileInputStream import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); System.out.println("FileContents :"); int ch; while ((ch = fin.read()) != -1) System.out.print((char) ch); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Ví dụ 2: Đọc một mảng ký tự trong file text với FileInputStream import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); System.out.println("FileContents :"); byte[] bytes = new byte[5]; int bytesReaded = fin.read(bytes); while (bytesReaded != -1) { for (int i = 0; i < bytesReaded; i++) { System.out.print((char) bytes[i]); } bytesReaded = fin.read(bytes); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Ví dụ 3: Đọc tất cả nội dung file vào mảng với FileInputStream

Note: Lưu ý nếu dữ liệu file quá lớn thì chúng ta nên đọc từng ký tự hoặc một mảng ký tự với kích thước vừa phải để tránh tràn bộ nhớ

import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); System.out.println("FileContents :"); byte[] bytes = new byte[fin.available()]; fin.read(bytes); for (byte b : bytes) System.out.print((char) b); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Ví dụ 4: Đọc từng dòng trong file text với FileInputStream import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); int data = fin.read(); StringBuilder line = new StringBuilder(); while (data != -1) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = fin.read(); continue; } line.append((char) data); data = fin.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Đọc file text với BufferedInputStream

BufferedInputStream tăng tốc độ đọc file với cơ chế sử dụng bộ nhớ đệm. BufferedInputStream sẽ đọc một khối dữ liệu vào bộ nhớ đệm của nó, khi chúng ta tiến hành đọc dữ liệu thì nó sẽ lấy từ bộ nhớ đệm để trả về. Kỹ thuật này giúp giảm đáng kể các thao tác I/O.

Ví dụ 1: Đọc từng ký tự trong file text với BufferedInputStream import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; class BufferedInputStreamDemo { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); BufferedInputStream bin = new BufferedInputStream(fin); int ch; while ((ch = bin.read()) != -1) System.out.print((char) ch); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Ví dụ 2: Đọc một mảng ký tự trong file text với BufferedInputStream import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); BufferedInputStream bis = new BufferedInputStream(fin); System.out.println("FileContents :"); byte[] bytes = new byte[5]; int bytesReaded = bis.read(bytes); while (bytesReaded != -1) { for (int i = 0; i < bytesReaded; i++) { System.out.print((char) bytes[i]); } bytesReaded = bis.read(bytes); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Ví dụ 3: Đọc từng dòng trong file text với BufferedInputStream import java.io.*; class ReadFile { public static void main(String args[]) { FileInputStream fin = null; try { fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt"); BufferedInputStream bis = new BufferedInputStream(fin); int data = bis.read(); StringBuilder line = new StringBuilder(); while (data != -1) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = bis.read(); continue; } line.append((char) data); data = bis.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fin != null) fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } Đọc file text với FileReader

FileReader đọc dữ liệu theo luồng ký tự vì vậy FileReader được khuyến khích sử dụng hơn FileInputStream khi đọc các file text.

Ví dụ 1: Đọc từng ký tự trong file text với FileReader import java.io.File; import java.io.FileReader; class FileReaderReadExample { public static void main(String[] args) { File file = null; FileReader reader = null; try { file = new File("/Users/nguyenthanhhai/Desktop/test.txt"); reader = new FileReader(file); int i; while ((i = reader.read()) != -1) { System.out.print((char) i); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } } Ví dụ 2: Đọc một mảng các ký tự trong FileReader import java.io.File; import java.io.FileReader; class ReadFileUsingFileReader { public static void main(String[] args) { File file = new File("/Users/nguyenthanhhai/Desktop/test.txt"); try (FileReader reader = new FileReader(file)){ char[] cs = new char[5]; int bytes = reader.read(cs); while (bytes != -1) { for (int i = 0; i < bytes; i++) { System.out.print(cs[i]); } bytes = reader.read(cs); } } catch (Exception e) { e.printStackTrace(); } } } Ví dụ 3: Đọc từng dòng trong FileReader import java.io.FileReader; import java.io.IOException; class ReadFile { public static void main(String args[]) { try (FileReader fin = new FileReader("/Users/nguyenthanhhai/Desktop/test.txt")) { int data = fin.read(); StringBuilder line = new StringBuilder(); while (data != -1) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = fin.read(); continue; } line.append((char)data); data = fin.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } } } Đọc file text sử dụng BufferedReader

Sử dụng BufferedReader với FileReader nhầm tối ưu tốc độ đọc file với cơ chế sử dụng bộ nhớ đệm. Trong đa số trường hợp chúng ta nên sử dụng BufferedReader với FileReader.

Ví dụ 1: Đọc từng ký tự trong file text với BufferedReader import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader bufferedReader = new BufferedReader(new FileReader("/Users/nguyenthanhhai/Desktop/test.txt"))) { int data = bufferedReader.read(); while (data != -1) { System.out.print((char) data); data = bufferedReader.read(); } } catch (IOException e) { e.printStackTrace(); } } } Ví dụ 2: Đọc từng dòng trong file text với BufferedReader import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader bufferedReader = new BufferedReader(new FileReader("/Users/nguyenthanhhai/Desktop/test.txt"))) { String line = bufferedReader.readLine(); while (line != null) { System.out.println(line); line = bufferedReader.readLine(); } } catch (IOException e) { e.printStackTrace(); } } }

Chúng ta có rất nhiều cách để đọc một file text. Thế nhưng mỗi cách có một ưu nhược điểm khác nhau. Mình thì thường sử dụng BufferedReader để đọc file text vì nó vừa tối ưu để đọc file text mà lại còn có cơ chế sử dụng bộ nhớ đệm để tăng tốc độ độc ghi file.

Hướng Dẫn Đọc File Text Trong Java Sử Dụng “Bufferedreader”

Khi sử dụng class BufferedReader trong Java để đọc nội dung một file text thì chúng ta có hai cách khác nhau đó là sử dụng method readLine() hoặc read() của class này. Trong bài viết này chúng ta sẽ tìm hiểu cách làm chi tiết của từng phương pháp với việc áp dụng vào đọc một file text nằm ở địa chỉ C:tmptest.txt.

Chuẩn Bị

Trước tiên thì bạn cần tạo file test.txt ở địa chỉ thư mục C:tmp như vừa đề cập để đảm bảo quá trình đọc nội dung file không gặp lỗi.

Sau đó bạn tạo một tập tin Main.java với nội dung như sau:

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) { } }

Bây giờ bên trong method main() của Main class này chúng ta sẽ thêm code Java để thực hiện việc đọc nội dung của file text sử dụng BufferedReader theo hai cách khác nhau.

Đọc File Text Sử Dụng BufferedReader với readLine()

Để đọc file theo cách này thì trong method main() của Main class bạn thêm đoạn code phía sau:

... BufferedReader br = null; try { br = new BufferedReader(new FileReader("C:\tmp\test.txt")); System.out.println("Đọc nội dung file sử dụng phương thức readLine()"); String textInALine; while ((textInALine = br.readLine()) != null) { System.out.println(textInALine); textInALine = br.readLine(); } } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } ...

Đoạn code đầy đủ của class Main.java sẽ như sau:

Ở đoạn code trên bạn chú ý method br.readLine() được gọi môi khi vòng lặp while được chạy để kiểm tra điều kiện của vòng lặp này cho tới khi nào giá trị trả về đồng thời in ra nội dung của giá trị này nếu như giá trị này khác null, trường hợp giá trị này là null thì chấm dứt vòng lặp:

while ((textInALine = br.readLine()) != null) { System.out.println(textInALine); textInALine = br.readLine(); } Đọc File Text Sử Dụng BufferedReader với read()

Để sử dụng cách này thì trong method main() trống được tạo ra lúc đầu bạn thêm vào đoạn code phía sau:

... BufferedReader br = null; try { br = new BufferedReader(new FileReader("C:\tmp\test.txt")); System.out.println("Đọc nội dung file sử dụng phương thức read()"); int num=0; char ch; while((num = br.read()) != -1) { ch = (char) num; System.out.print(ch); } } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } ...

Đoạn code đầy đủ của class Main.java sẽ như sau:

Khi gọi br.read(), Java sẽ trả về từng các số mã hoá của từng ký tự thay vì nội dung cả dòng như cách sử dụng redline(). Chúng ta cũng sử dụng vòng lặp while để đọc ra từng số mã hoá ký tự này và sau đó chuyển hoá về dạng ký tự chữ:

while((num = br.read()) != -1) { ch = (char) num; System.out.print(ch); }

Lập Trình App Inventor Đọc Và Ghi File

Giới thiệu

Trong bài viết này, chúng ta sẽ lập trình một ứng dụng “câu hỏi trắc nghiệm’ đơn giản. Ứng dụng sẽ đọc danh sách câu hỏi được chuẩn bị từ trước trong bộ nhớ điện thoại và hiển thị lên màn hình. Người dùng sẽ chọn một trong 4 câu trả lời, các câu trả lời sẽ được lưu lại một file riêng trên điện thoại.

Chuẩn bị Thực hiện Thiết kế giao diện Màn hình câu hỏi

Trong màn hình này, chúng ta sẽ dùng các thành phần chính sau:

File để đọc và ghi tệp trên điện thoại.

Label để hiển thị câu hỏi.

Button để người dùng chọn câu trả lời.

Màn hình kết quả sẽ dùng các thành phần chính sau:

File để lấy danh sách câu trả lời đã lưu.

Label để hiển thị kết quả.

Button khi được nhấn thì trở về màn hình trắc nghiệm.

Ngoài ra, chúng ta còn cần chuẩn bị một file câu hỏi có định dạng là CSV được lưu trong thư mục Download của điện thoại. Các bạn có thể soạn câu hỏi trên Mircosoft Excel rồi export ra định dạng CSV. Hoặc mở trình soạn thảo văn bản và nhập nội dung vào.

Về cấu trúc của file csv thì mỗi một dòng tương ứng với một dòng của excel. Trên mỗi dòng, dấu phẩy dùng để chia nội dung ra tương ứng với các cột của excel.

Ví dụ:

Nội dung dạng bảng tính excel:

Và nội dung file CSV tương ứng:

Lập trình lấy và hiển thị câu hỏi

Đầu tiên, chúng ta sẽ tạo biến dạng danh sách để lưu các câu hỏi được lấy ra từ file csv.

Ngoài ra trong khối nhóm trên, chúng ta có một khối Procedures do người dùng tự tạo là “doi_cau_hoi”. Procedures cho phép người dùng nhóm một tập hợp các khối code lại với một định danh, khi cần dùng khối code thì chỉ cần gọi procedures với tên tương ứng.

Trong chương trình này. Procedures doi_cau_hoi sẽ lấy ngẫu nhiên một câu hỏi trong danh sách câu hỏi, rồi cho Label và ButtonCauA, B, C, D hiển thị lên màn hình.

Tương tự như màn hình trắc nghiệm, khi màn hình được chuyển qua thì ứng dụng được lập trình để lấy file kết quả.

Cập nhật thông tin chi tiết về Đọc Ghi File Trong Java trên website Uta.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!