• Tags         
  • 2018-07-30  12:16:32        
  • 65 °C    

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

    有几种方法可以用Java读取纯文本文件,例如,您可以使用FileReaderBufferedReaderScanner来读取文本文件。每个实用程序都提供了一些特殊功能,例如BufferedReader提供数据缓冲以便快速读取,而Scanner提供解析功能。

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

    注意:为了更好地理解初学者的代码,我们已经避免了编写良好代码(如刷新/关闭流,异常处理等)的常规做法。

    在Java中读取txt文本文件的方法

    1. 使用BufferedReader:此方法从字符输入流中读取文本。它可以缓冲有效读取字符,数组和行。
      可以指定缓冲区大小,或者可以使用默认大小。对于大多数用途,默认值足够大。通常,由Reader构成的每个读取请求都会导致相应的读取请求由基础字符或字节流构成。因此,建议将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);
        }
      }
      
    2. 使用FileReader类:用于读取字符文件的便捷类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的。
      此类中定义的构造函数是:

      //创建一个新的FileReader,给定
      //要读取的文件。
      FileReader(File file)
      
      //创建一个新的FileReader,给定
      // FileDescriptor来自。
      FileReader(FileDescriptor fd)
      
      //创建一个新的FileReader,给定
      //要读取的文件的名称。
      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);
        }
      }
      
    3. 使用Scanner类:一个简单的文本扫描程序,可以使用正则表达式解析基本类型和字符串。
      扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换成不同类型的值。

      // 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());
        }
      }
      
    4. 使用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());
        }
      }
      
    5. 读取List中的整个文件:读取文件中的所有行。此方法可确保在读取所有字节或抛出I / O错误或其他运行时异常时关闭文件。使用指定的字符集将文件中的字节解码为字符。
      public static List readAllLines(Path path,Charset cs)抛出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());
        }
      }
      
    6. 在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://www.breakyizhan.com/java/5012.html