个性化阅读
专注于IT技术分析

用Java读取文本文件的不同方法有哪些?

有多种写入和读取文本文件的方法。在处理许多应用程序时, 这是必需的。

有几种方法可以读取Java中的纯文本文件, 例如你可以使用文件阅读器, 缓冲读取器or扫描器读取文本文件。每个实用程序都提供一些特殊的东西, 例如BufferedReader提供数据缓冲以快速读取, 而Scanner提供解析功能。

我们还可以同时使用BufferReader和Scanner来在Java中逐行读取文本文件。然后Java SE 8引入了另一个Stream类java.util.stream.Stream这提供了一种懒惰且更有效的方式来读取文件

注意:为了避免初学者对代码的更好理解, 在这里也避免了编写良好代码的常规做法, 例如刷新/关闭流, 异常处理等。

以下是读取文件的许多方法:

使用BufferedReader:

此方法从字符输入流读取文本。它确实进行缓冲以有效读取字符, 数组和行。

可以指定缓冲区大小, 也可以使用默认大小。对于大多数用途, 默认值足够大。

通常, 读取器发出的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此, 建议将BufferedReader包裹在其read()操作可能会很昂贵的任何Reader周围, 例如FileReaders和InputStreamReaders。例如,

BufferedReader in = new BufferedReader(Reader in, int size);
//Java Program to illustrate reading from FileReader
//using BufferedReader
import java.io.*;
public class ReadFromFile2
{
   public static void main(String[] args) throws Exception
   {
   //We need to provide file path as the parameter:
   //double backquote is to avoid compiler interpret words
   //like \test as \t (ie. as a escape sequence)
   File file = new File( "C:\\Users\\pankaj\\Desktop\\test.txt" );
  
   BufferedReader br = new BufferedReader( new FileReader(file));
  
   String st;
   while ((st = br.readLine()) != null )
     System.out.println(st);
   }
}

使用FileReader类:

读取字符文件的便捷类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。

此类中定义的构造方法是:

//Creates a new FileReader, given the
//File to read from.
FileReader(File file)

//Creates a new FileReader, given the
//FileDescriptor to read from.
FileReader(FileDescriptor fd)

//Creates a new FileReader, given the
//name of the file to read from.
FileReader(String fileName)
//Java Program to illustrate reading from
//FileReader using FileReader
import java.io.*;
public class ReadingFromFile
{
   public static void main(String[] args) throws Exception
   {
     //pass the path to the file as a parameter
     FileReader fr =
       new FileReader( "C:\\Users\\pankaj\\Desktop\\test.txt" );
  
     int i;
     while ((i=fr.read()) != - 1 )
       System.out.print(( char ) i);
   }
}

使用扫描仪类:

一个简单的文本扫描器, 可以使用正则表达式解析原始类型和字符串。

扫描程序使用定界符模式将其输入分为令牌, 默认情况下, 该模式与空格匹配。然后, 可以使用各种下一种方法将生成的令牌转换为不同类型的值。

//Java Program to illustrate reading from Text File
//using Scanner Class
import java.io.File;
import java.util.Scanner;
public class ReadFromFileUsingScanner
{
   public static void main(String[] args) throws Exception
   {
     //pass the path to the file as a parameter
     File file =
       new File( "C:\\Users\\pankaj\\Desktop\\test.txt" );
     Scanner sc = new Scanner(file);
  
     while (sc.hasNextLine())
       System.out.println(sc.nextLine());
   }
}

使用Scanner类但不使用循环:

//Java Program to illustrate reading from FileReader
//using Scanner Class reading entire File
//without using loop
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
  
public class ReadingEntireFileWithoutLoop
{
   public static void main(String[] args)
                         throws FileNotFoundException
   {
     File file = new File( "C:\\Users\\pankaj\\Desktop\\test.txt" );
     Scanner sc = new Scanner(file);
  
     //we just need to use \\Z as delimiter
     sc.useDelimiter( "\\Z" );
  
     System.out.println(sc.next());
   }
}

读取列表中的整个文件:

读取文件中的所有行。此方法可确保在读取所有字节或引发I/O错误或其他运行时异常时关闭文件。使用指定的字符集将文件中的字节解码为字符。

public static List readAllLines(Path path, Charset cs)throws IOException

此方法将以下内容识别为行终止符:

\u000D followed by \u000A, CARRIAGE RETURN followed by LINE FEED
\u000A, LINE FEED
\u000D, CARRIAGE RETURN
//Java program to illustrate reading data from file
//using nio.File
import java.util.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.io.*;
public class ReadFileIntoList
{
   public static List<String> readFileInList(String fileName)
   {
  
     List<String> lines = Collections.emptyList();
     try
     {
       lines =
        Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
     }
  
     catch (IOException e)
     {
  
       //do something
       e.printStackTrace();
     }
     return lines;
   }
   public static void main(String[] args)
   {
     List l = readFileInList( "C:\\Users\\pankaj\\Desktop\\test.java" );
  
     Iterator<String> itr = l.iterator();
     while (itr.hasNext())
       System.out.println(itr.next());
   }
}

在Java中以String形式读取文本文件:

//Java Program to illustrate reading from text file
//as string in Java
package io;
import java.nio.file.*;;
public class ReadTextAsString
{
   public static String readFileAsString(String fileName) throws Exception
   {
     String data = "" ;
     data = new String(Files.readAllBytes(Paths.get(fileName)));
     return data;
   }
  
   public static void main(String[] args) throws Exception
   {
     String data = readFileAsString( "C:\\Users\\pankaj\\Desktop\\test.java" );
     System.out.println(data);
   }
}

参考文献:

https://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html

http://docs.oracle.com/javase/tutorial/essential/io/

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(0) 打赏
未经允许不得转载:srcmini » 用Java读取文本文件的不同方法有哪些?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏