程序员社区

Java IO教程 --- Java读取文件到字符串

有时在处理文件时,我们需要在 Java 中将文件读取为 String。今天我们将研究在Java中将文件读取为String的各种方法。

Java读取文件到字符串

在 Java 中有很多方法可以将文件读取为 String。我们将在本教程中探索以下方法。

  1. Java 使用BufferedReader]读取文件到字符串
  2. 使用FileInputStream在 java 中读取文件到字符串
  3. Java 使用Files 类读取文件到字符串
  4. 使用Scanner类将文件读入字符串
  5. Java 使用 Apache Commons IO FileUtils 类将文件读取为字符串

file

现在让我们看看这些类并将文件读入字符串。

Java 使用 BufferedReader 读取文件到字符串

我们可以使用BufferedReader readLine方法逐行读取文件。我们所要做的就是将这些附加到带有换行符的StringBuilder对象中。下面是使用 BufferedReader 将文件读取为字符串的代码片段。

BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
    stringBuilder.append(line);
    stringBuilder.append(ls);
}
// delete the last new line separator
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

还有另一种使用 BufferedReader 和char array将文件读取到 String 的有效方法。

BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
while (reader.read(buffer) != -1) {
    stringBuilder.append(new String(buffer));
    buffer = new char[10];
}
reader.close();

String content = stringBuilder.toString();

使用 FileInputStream 在 java 中读取文件到字符串

我们可以使用 FileInputStream 和字节数组将文件读入字符串。您应该使用此方法读取非基于字符的文件,例如图像、视频等。

FileInputStream fis = new FileInputStream(fileName);
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
while (fis.read(buffer) != -1) {
    sb.append(new String(buffer));
    buffer = new byte[10];
}
fis.close();

String content = sb.toString();

Java 使用 Files 类读取文件到字符串

我们可以使用 Files 实用程序类在一行代码中将所有文件内容读取为字符串。

String content = new String(Files.readAllBytes(Paths.get(fileName)));

使用 Scanner 类将文件读入字符串

扫描器类是一种在java中将文本文件读取为字符串的快速方法。

Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();

Java 使用 Apache Commons IO FileUtils 类将文件读取为字符串

如果您在项目中使用 Apache Commons IO,那么这是一种在 java 中将文件读取为字符串的简单快捷的方法。

String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);

Java读取文件到字符串示例

这是具有适当异常处理的最终程序,并显示了将文件读取为字符串的所有不同方法。

package com.journaldev.files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;

import org.apache.commons.io.FileUtils;

public class JavaReadFileToString {

    /**
     * This class shows different ways to read complete file contents to String
     * 
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) {
        String fileName = "/Users/pankaj/Downloads/myfile.txt";

        String contents = readUsingScanner(fileName);
        System.out.println("*****Read File to String Using Scanner*****\n" + contents);

        contents = readUsingApacheCommonsIO(fileName);
        System.out.println("*****Read File to String Using Apache Commons IO FileUtils*****\n" + contents);

        contents = readUsingFiles(fileName);
        System.out.println("*****Read File to String Using Files Class*****\n" + contents);

        contents = readUsingBufferedReader(fileName);
        System.out.println("*****Read File to String Using BufferedReader*****\n" + contents);

        contents = readUsingBufferedReaderCharArray(fileName);
        System.out.println("*****Read File to String Using BufferedReader and char array*****\n" + contents);

        contents = readUsingFileInputStream(fileName);
        System.out.println("*****Read File to String Using FileInputStream*****\n" + contents);

    }

    private static String readUsingBufferedReaderCharArray(String fileName) {
        BufferedReader reader = null;
        StringBuilder stringBuilder = new StringBuilder();
        char[] buffer = new char[10];
        try {
            reader = new BufferedReader(new FileReader(fileName));
            while (reader.read(buffer) != -1) {
                stringBuilder.append(new String(buffer));
                buffer = new char[10];
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null)
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

        return stringBuilder.toString();
    }

    private static String readUsingFileInputStream(String fileName) {
        FileInputStream fis = null;
        byte[] buffer = new byte[10];
        StringBuilder sb = new StringBuilder();
        try {
            fis = new FileInputStream(fileName);

            while (fis.read(buffer) != -1) {
                sb.append(new String(buffer));
                buffer = new byte[10];
            }
            fis.close();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null)
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        return sb.toString();
    }

    private static String readUsingBufferedReader(String fileName) {
        BufferedReader reader = null;
        StringBuilder stringBuilder = new StringBuilder();

        try {
            reader = new BufferedReader(new FileReader(fileName));
            String line = null;
            String ls = System.getProperty("line.separator");
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
                stringBuilder.append(ls);
            }
            // delete the last ls
            stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null)
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

        return stringBuilder.toString();
    }

    private static String readUsingFiles(String fileName) {
        try {
            return new String(Files.readAllBytes(Paths.get(fileName)));
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String readUsingApacheCommonsIO(String fileName) {
        try {
            return FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String readUsingScanner(String fileName) {
        Scanner scanner = null;
        try {
            scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
            // we can use Delimiter regex as "\\A", "\\Z" or "\\z"
            String data = scanner.useDelimiter("\\A").next();
            return data;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (scanner != null)
                scanner.close();
        }

    }

}

您可以使用上述任何一种方式在java中将文件内容读取为字符串。但是,如果文件大小很大,则不建议这样做,因为您可能会遇到内存不足的错误。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Java IO教程 --- Java读取文件到字符串

一个分享Java & Python知识的社区