Java 简明教程

Java - Reading File

Reading a File in Java

在Java中,我们可以使用多种方法读取一个文件。以下是使用Java创建文件的三种最流行方法 −

  1. Using FileInputStream() constructor

  2. Using FileReader.read() method

  3. Using Files.readAllLines() method

让我们了解一下每一种阅读Java文件中内容的方法。

Reading File Using FileInputStream() Constructor

FileInputStream 用于从文件读取数据。可以使用关键字 new 创建对象,并且有几种类型的构造函数可用。

Syntax

以下 constructor 将一个文件名作为字符串,创建一个输入流对象来读取文件——

InputStream f = new FileInputStream("C:/java/hello.txt");

Syntax

以下构造函数获取文件对象以创建输入流对象来读取文件。我们首先使用 File() 方法创建一个文件对象,如下所示 −

File f = new File("C:/java/hello.txt");
InputStream f = new FileInputStream(f);

Example: Reading File Using FileInputStream() Constructor

以下示例演示了 FileInputStream 从当前目录读取文件 −

package com.tutorialspoint;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileTest {
   public static void main(String args[]) {
      try {
         byte bWrite [] = {65, 66, 67, 68, 69};
         OutputStream os = new FileOutputStream("test.txt");
         for(int x = 0; x < bWrite.length ; x++) {
            os.write( bWrite[x] );   // writes the bytes
         }
         os.close();

         InputStream is = new FileInputStream("test.txt");
         int size = is.available();

         for(int i = 0; i < size; i++) {
            System.out.print((char)is.read() + "  ");
         }
         is.close();
      } catch (IOException e) {
         System.out.print("Exception");
      }
   }
}

上面的代码将创建文件 test.txt,并以二进制格式写入给定的数字。使用 FileInputStream 会读取相同内容,输出打印在 stdout 屏幕上。

A  B  C  D  E

Reading File Using FileReader.read() Method

FileReader class 的 FileReader.read() 方法允许从文件读取字符,如下所示——

Syntax

// get an existing file
File file = new File("d://test//testFile1.txt");

// read content
FileReader reader = new FileReader(file);

int c;
while ((c = reader.read()) != -1) {
   char ch = (char) c;
   System.out.print(ch);
}

Example: Reading File Using FileReader.read() Method

以下示例演示文件,该文件使用 FileReader.read() 方法读取给定目录中的文件 −

package com.tutorialspoint;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileTest {
   public static void main(String args[]) {
      try {
         File file = new File("d://test//testFile1.txt");

         //Create the file
         if (file.createNewFile()) {
            System.out.println("File is created!");
         } else {
            System.out.println("File already exists.");
         }

         // Write Content
         FileWriter writer = new FileWriter(file);
         writer.write("Test data");
         writer.close();


         // read content
         FileReader reader = new FileReader(file);

         int c;
         while ((c = reader.read()) != -1) {
            char ch = (char) c;
            System.out.print(ch);
         }
      } catch (IOException e) {
         System.out.print("Exception");
      }
   }
}

上面的代码将创建文件 test.txt,并将指定的字符串写入文本格式。stdout 屏幕上将有相同输出。

File is created!
Test data

Reading File Using Files.readAllLines() Method

Files.readAllLines() 是一个较新的方法,可以按字符串列表的形式读取文件的所有内容,如下所示 −

Syntax

List<String> content = Files.readAllLines(Paths.get("d://test/testFile3.txt"));

Example: Reading File Using Files.readAllLines() Method

以下示例演示了文件,使用 readAllLines() 方法从给定目录读取文件 −

package com.tutorialspoint;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
import java.util.List;

public class FileTest {
   public static void main(String args[]) {
      try {
    	  String data = "Test data";
          Files.write(Paths.get("d://test/testFile3.txt"), data.getBytes());
          List<String> lines = Arrays.asList("1st line", "2nd line");
          Files.write(Paths.get(
             "file6.txt"), lines, StandardCharsets.UTF_8,
             StandardOpenOption.CREATE, StandardOpenOption.APPEND);

          List<String> content = Files.readAllLines(Paths.get("d://test/testFile3.txt"));

          System.out.println(content);

          content = Files.readAllLines(Paths.get("file6.txt"));

          System.out.println(content);
      } catch (IOException e) {
         System.out.print("Exception");
      }
   }
}

上面的代码将创建文件 test.txt,并将指定的字符串写入文本格式。stdout 屏幕上将有相同输出。

[Test data]
[1st line, 2nd line]