Es gibt viele Möglichkeiten, Dateien zu lesen, basierend auf der herkömmlichen Eingabestream-Methode oder der Nio-basierten Pufferobjekt- und Pipe-Lesemethode oder sogar einer sehr schnellen Speicherzuordnung zum Lesen von Dateien.
Vier Möglichkeiten, Dateien in Java zu lesen: (Empfohlen: Java-Video-Tutorial)
1. RandomAccessFile: Zufälliges Lesen, relativ langsam lesbarer beschreibbarer und bedienbarer Dateizeiger
2. FileInputStream: io-normaler Eingabestream-Modus, durchschnittliche Geschwindigkeit und Effizienz
3. Puffer-Puffer-Lesung: basierend auf nio-Puffer- und FileChannel-Lesung, schneller
4. Speicherzugeordnetes Lesen: basierend auf MappedByteBuffer, dem schnellsten
//RandomAccessFile类的核心在于其既能读又能写
public void useRandomAccessFileTest() throws Exception {
RandomAccessFile randomAccessFile = new RandomAccessFile(new File("e:/nio/test.txt"), "r");
byte[] bytes = new byte[1024];
int len = 0;
while ((len = randomAccessFile.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len, "gbk"));
}
randomAccessFile.close();
}
//使用FileInputStream文件输入流,比较中规中矩的一种方式,传统阻塞IO操作。 public void testFielInputStreamTest() throws Exception { FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt")); // 使用输入流读取文件,以下代码块几乎就是模板代码 byte[] bytes = new byte[1024]; int len = 0; while ((len = inputStream.read(bytes)) != -1) {// 如果有数据就一直读写,否则就退出循环体,关闭流资源。 System.out.println(new String(bytes, 0, len, "gbk")); } inputStream.close(); }
FielInputStream-Lesen
// nio 读取 public void testBufferChannel() throws Exception { FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt")); FileChannel fileChannel = inputStream.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); // 以下代码也几乎是Buffer和Channle的标准读写操作。 while (true) { buffer.clear(); int result = fileChannel.read(buffer); buffer.flip(); if (result == -1) { break; } System.out.println(new String(buffer.array(), 0, result, "gbk")); } inputStream.close(); }
Lesen von Pufferpufferobjekten
public void testmappedByteBuffer() throws Exception { FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt")); FileOutputStream outputStream = new FileOutputStream(new File("e:/nio/testcopy.txt"),true); FileChannel inChannel = inputStream.getChannel(); FileChannel outChannel = outputStream.getChannel(); System.out.println(inChannel.size()); MappedByteBuffer mappedByteBuffer = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size()); System.out.println(mappedByteBuffer.limit()); System.out.println(mappedByteBuffer.position()); mappedByteBuffer.flip(); outChannel.write(mappedByteBuffer); outChannel.close(); inChannel.close(); outputStream.close(); inputStream.close(); } //基于内存映射这种方式,这么写好像有问题。 MappedByteBuffer和RandomAcessFile这两个类要单独重点研究一下。 //TODO 大文件读取
Lesen von Speicherkarten
rrreeeFür weitere Java-Kenntnisse beachten Sie bitteGrundlegendes Java-Tutorial Spalte.
Das obige ist der detaillierte Inhalt vonWie lese ich Dateien in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!