Java读取文件到字符串
时间:2020-02-23 14:36:47 来源:igfitidea点击:
有时在处理文件时,我们需要将文件读取为Java中的String。
今天,我们将研究使用Java将文件读取为String的各种方法。
Java读取文件到字符串
在Java中,有很多方法可以将文件读取为String。
在本教程中,我们将探索以下方式。
- Java使用BufferedReader将文件读取为String
- 使用FileInputStream在Java中将文件读取为String
- Java使用Files类将文件读取为字符串
- 使用Scanner类将文件读取到String
- Java使用Apache Commons IO FileUtils类将文件读取为字符串
现在,让我们研究这些类,然后将文件读取到String。
Java使用BufferedReader将文件读取为String
我们可以使用BufferedReader的readLine方法逐行读取文件。
我们要做的就是将这些附加到带有换行符的StringBuilder对象上。
下面是使用BufferedReader将文件读取为String的代码片段。
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数组将文件读取到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中将文件读取为String
我们可以使用FileInputStream和字节数组将文件读取为String。
您应该使用此方法读取非基于字符的文件,例如图像,视频等。
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类将文件读取为String
扫描程序类是一种将文本文件读取为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.theitroad.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/hyman/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中的字符串。
但是,如果文件太大,则不建议这样做,因为您可能会遇到内存不足的错误。